Je suis un peu confus sur la façon de filtrer les enregistrements par format de date.Les enregistrements de filtre MySQL sont définis à l'aide du format de date JJ-MM-AAAA
J'ai une colonne date du type de données date (aaaa-mm-jj) dans la table de dates.
Ex:
date
-----
2017-01-29
2017-01-30
Je suis veux changer le format (dd-mm-aaaa). J'utilise ce code
SELECT
DATE_FORMAT(`date`, '%d-%m-%Y') as date
FROM
dim_date;
date
-----
29-01-2017
30-01-2017
Je veux filtrer les enregistrements au format (jj-mm-aaaa). J'ai donc essayé ce code.
SELECT
DATE_FORMAT(`date`, '%d-%m-%Y') date
FROM
dim_date
WHERE DATE_FORMAT(`date`, '%d-%m-%Y') BETWEEN '20-04-2015' AND '06-09-2017';
Résultats Rien
Mais si j'essaie de filtrer avec le format original (aaaa-mm-jj) Il fonctionne.
SELECT DATE_FORMAT(`date`, '%d-%m-%Y') date
FROM dim_date
WHERE DATE_FORMAT(`date`, '%Y-%m-%d') BETWEEN '2015-04-20' AND '2017-01-07';
Pourquoi est ce comportement bizarre dans Mysql? Est-ce que j'ai râté quelque chose?
J'ai aussi essayé avec ce format DATE_FORMAT(
Date , '%d-%c-%Y')
, DATE_FORMAT(
Date , '%d-%l-%Y')
& DATE_FORMAT(
Date , '%e-%l-%Y')
Aucun visage heureux, S'il vous plaît laissez-moi connu.
Merci
Max
je ne vois pas la différence entre les deux requêtes ... s'il vous plaît expliquer mieux – scaisEdge
'Date_format' vous donnera une chaîne. Et si vous comparez vos valeurs sous la forme d'une chaîne, il n'y a pas de caractère qui soit '> = 2' et' <= 0' (qui est ce que 'entre '2' et '0'' chercheront). Pourquoi voulez-vous l'utiliser de cette façon? Vous pouvez simplement convertir votre entrée à une date valide et comparer des dates valides. Cela vous permettra également d'utiliser des index. Et, bien, il filtrera réellement comme vous le voulez pour fonctionner. – Solarflare
@scaisEdge J'ai mis à jour la requête. s'il vous plait verifiez maintenant. Désolé, je suis confus avec les formats de date pour le moment. – MAX