J'ai une table qui contient une colonne datetime. Je souhaite retourner tous les enregistrements d'un jour donné quelle que soit l'heure. Ou en d'autres termes, si ma table ne contenait que les 4 enregistrements suivants, seuls les 2ème et 3ème seraient retournés si je limite au 2012-12-25.
2012-12-24 00:00:00
2012-12-25 00:00:00
2012-12-25 06:00:00
2012-12-26 05:00:00
Réponses:
N'utilisez JAMAIS un sélecteur comme
DATE(datecolumns) = '2012-12-24'
- c'est un tueur de performances:DATE()
pour toutes les lignes, y compris celles qui ne correspondent pasC'est beaucoup plus rapide à utiliser
car cela permettra l'utilisation de l'indice sans calcul.
ÉDITER
Comme l'a souligné Used_By_Already, depuis la réponse initiale en 2012, il y a eu des versions de MySQL, où l'utilisation de «23: 59: 59» comme fin de journée n'est plus sûre. Une version mise à jour devrait lire
L'essentiel de la réponse, c'est-à-dire l'évitement d'un sélecteur sur une expression calculée, tient bien sûr toujours.
la source
WHERE col >= '2012-12-25' AND col < '2012-12-25' + INTERVAL 1 DAY
. Il évite 0 temps et travaille pourDATE
,DATETIME
,DATETIME(6)
, etc. Et traite bissextile jours, etc.... WHERE date_column >='2012-12-25' AND date_column <'2012-12-26'
peut potentiellement mieux fonctionner (si vous avez un index sur date_column) queDATE
.la source
BETWEEN
solution ...BETWEEN
est juste une manière d'écrirefield >= value1 and fied<= value2
.Vous pouvez utiliser
%
:la source