Sélectionnez les enregistrements de MAINTENANT () -1 jour

138

Existe-t-il un moyen dans une instruction MySQL d'ordonner les enregistrements (via un horodatage) par> = NOW () -1 afin que tous les enregistrements de la veille d'aujourd'hui au futur soient sélectionnés?

utilisateur1092780
la source

Réponses:

269

À en juger par la documentation des fonctions de date / heure , vous devriez pouvoir faire quelque chose comme:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Jon Skeet
la source
comment arriver maintenant à ainsi de suite .. signifie la date actuelle de tous les enregistrements disponibles dans la base de données. ? c'est juste pour un jour mais j'ai besoin de tous les enregistrements maintenant sur les mots. @jon
Muddasir Abbas
Tient-il compte de l'heure locale de l'utilisateur lorsque les enregistrements sont au format UTC?
Adry
1
@Adry: J'en doute, mais vous devriez tester attentivement.
Jon Skeet
63

Sachez que le résultat peut être légèrement différent de ce que vous attendez.

NOW()renvoie un DATETIME.

Et INTERVALfonctionne comme nommé, par exemple INTERVAL 1 DAY = 24 hours.

Donc, si votre script est créé pour s'exécuter 03:00, il manquera le fichier first three hours of records from the 'oldest' day.

Pour une utilisation toute la journée CURDATE() - INTERVAL 1 DAY. Cela reviendra au début de la veille, quel que soit le moment où le script est exécuté.

William Dan Terry
la source
Voter pour CURDATE ()
rob
17

Vous y êtes presque: c'est NOW() - INTERVAL 1 DAY

dasblinkenlight
la source
8

Sûr que vous pouvez:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
Marco Miltenburg
la source
Confus en utilisant DATE_ADDalors -1 day.
Andrew Atkinson
8

Je n'ai vu aucune réponse correctement en utilisant DATE_ADDou DATE_SUB:

Soustraire 1 jour de NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

Ajouter 1 jour à partir de NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
Andrew Atkinson
la source
1

lorsque le champ de recherche est horodaté et que vous souhaitez rechercher des enregistrements entre 0 heure hier et 0 heure aujourd'hui, utilisez la construction

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

au lieu

 now() - interval 1 day
Michael de Oz
la source