Sélection de données d'une base de données MySQL entre deux dates
Dans MySQL, la récupération de données dans une plage de dates spécifique présente un défi courant lors du stockage de dates comme valeurs datetime. L'utilisation des opérateurs >= et <= peut ne pas toujours donner les résultats souhaités en raison de l'interprétation par défaut de minuit comme début d'une date.
Considérez le scénario dans lequel vous souhaitez sélectionner les enregistrements dans lesquels se trouve la colonne create_at. entre le « 01/12/2011 » et le « 06/12/2011 ». L'exécution de la requête suivante exclura étonnamment l'enregistrement attendu qui s'est produit à « 2011-12-06 10:45:36 » :
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND created_at <= '2011-12-06'
La raison est que MySQL interprète la date de fin comme minuit (« 2011- 12-06 00:00:00'), excluant effectivement les enregistrements créés plus tard dans la journée. Pour sélectionner l'enregistrement souhaité, modifiez la date de fin en « 2011-12-07 » :
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND created_at <= '2011-12-07'
Vous pouvez également utiliser DATE_ADD() pour ajouter des jours à la date de début, créant ainsi un intervalle incluant la fin souhaitée. date :
SELECT `users`.* FROM `users` WHERE created_at >= '2011-12-01' AND created_at <= DATE_ADD('2011-12-01', INTERVAL 7 DAY)</p> <p>Pour une meilleure lisibilité, l'opérateur BETWEEN peut être utilisé :</p> <pre class="brush:php;toolbar:false">SELECT `users`.* FROM `users` WHERE created_at BETWEEN('2011-12-01', DATE_ADD('2011-12-01', INTERVAL 7 DAY))
En ajustant la date de fin ou en utilisant la fonction DATE_ADD(), vous pouvez sélectionner avec précision les données de la plage de dates spécifiée, garantissant ainsi que tous les enregistrements créés à la date de fin prévue sont capturés.
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!