MySQL : Sélection de données entre deux dates
Dans MySQL, lorsque vous travaillez avec des champs datetime, il est essentiel d'être conscient des nuances de date formatage. Comme vous l'avez découvert, l'utilisation du format de date « 2011-12-06 10:45:36 » sans tenir compte de l'heure peut conduire à des résultats inattendus lorsque vous essayez de récupérer des données entre des dates spécifiques.
Le Midnight Trap
La version courte par défaut des dates dans MySQL interprète 00:00:00 comme le début d'une journée. Cela signifie que votre requête :
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND created_at <= '2011-12-06'
devenait effectivement :
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01 00:00:00' AND created_at <= '2011-12-06 00:00:00'
En conséquence, l'élément que vous attendiez, '2011-12-06 10:45:36' , a été exclu car sa composante temporelle était en dehors de la plage spécifiée.
Solutions élégantes
Pour résoudre ce problème, vous disposez de plusieurs options :
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND created_at <= '2011-12-07'
SELECT `users`.* from `users` WHERE created_at >= '2011-12-01' AND created_at <= date_add('2011-12-01', INTERVAL 7 DAY)
SELECT `users`.* from `users` WHERE created_at BETWEEN('2011-12-01', date_add('2011-12-01', INTERVAL 7 DAY));
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!