web-dev-qa-db-fra.com

Sélectionnez des enregistrements parmi NOW () -1 jour

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

100
user1092780

À 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
196
Jon Skeet

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

NOW() renvoie DATETIME

Et INTERVAL fonctionne comme indiqué, par ex. INTERVAL 1 DAY = 24 hours

Donc, si votre script doit être exécuté à 03:00, il manquera le first three hours of records from the 'oldest' day.

Pour utiliser toute la journée, utilisez CURDATE() - INTERVAL 1 DAY. Cela reviendra au début du jour précédent, quel que soit le moment où le script est exécuté.

44

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

14
dasblinkenlight

Sûr que vous pouvez:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
7
Marco Miltenburg

N'a vu aucune réponse correctement en utilisant DATE_ADD ou DATE_SUB:

Soustrayez 1 jour à NOW()

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

Ajouter 1 jour de NOW()

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

lorsque le champ de recherche est timestamp et que vous voulez trouver des enregistrements de 0 heure hier et 0 heure aujourd'hui

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
0
Michael de Oz