Maison > base de données > tutoriel mysql > le corps du texte

Comment sélectionner correctement les données MySQL entre deux dates, heure comprise ?

DDD
Libérer: 2024-11-19 10:44:03
original
438 Les gens l'ont consulté

How to Correctly Select MySQL Data Between Two Dates Including Time?

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'
Copier après la connexion

devenait effectivement :

SELECT `users`.* FROM `users` 
WHERE created_at >= '2011-12-01 00:00:00' 
AND created_at <= '2011-12-06 00:00:00'
Copier après la connexion

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 :

  • Prolongez la date de fin : Modifiez la requête pour inclure le jour suivant afin de capturer toute la plage :
SELECT `users`.* FROM `users` 
WHERE created_at >= '2011-12-01' 
AND created_at <= '2011-12-07'
Copier après la connexion
  • Utilisez DATE_ADD : Utilisez la fonction DATE_ADD pour ajouter un intervalle à la date de fin :
SELECT `users`.* from `users` 
WHERE created_at >= '2011-12-01' 
AND created_at <= date_add('2011-12-01', INTERVAL 7 DAY)
Copier après la connexion
  • Utilisez l'opérateur BETWEEN : Cet opérateur fournit une manière plus concise de spécifier la plage de dates :
SELECT `users`.* from `users` 
WHERE created_at BETWEEN('2011-12-01', date_add('2011-12-01', INTERVAL 7 DAY));
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal