Comparer des dates mal formattées en Mysql

C’est crade mais ça marche !

En base de données (Mysql), une date sous la forme jj/m/aaaa, stockée dans un champ texte (varchar) peut être requêtée comme une date.

Il faut transformer la valeur jj/m/aaaa sous la forme aaaa-mm-dd avec CONCAT ou CONCAT_WS et des SUBSTRING, puis la comparer avec une date au même format aaaa-mm-dd. Je n’aurais pas parié que ça fonctionnerait, mais si, il est possible d’utiliser des <,> et = évidemment.

Exemple :

SELECT * FROM matable WHERE CONCAT_WS('-', SUBSTRING('monchamp',7,4), SUBSTRING('monchamp',4,2), SUBSTRING('monchamp',1,2)) < '2015-01-14'

ressortira les valeurs inférieures au 14 janvier 2015.

Attention, pour SUBSTRING, le compte se fait à partir de 1 et non de 0 (pour extraire le jour, on a donc bien une position de départ à 1).

En savoir plus :

fonction SUBSTRING

fonctions CONCAT et CONCAT_WS