Wählen Sie Datensätze von NOW () -1 Day aus


138

Gibt es eine Möglichkeit in einer MySQL-Anweisung, Datensätze (über einen Datumsstempel) nach> = NOW () -1 zu ordnen, damit alle Datensätze vom heutigen Tag bis in die Zukunft ausgewählt werden?

Antworten:


268

Nach der Dokumentation für Datums- / Zeitfunktionen zu urteilen , sollten Sie in der Lage sein, Folgendes zu tun:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

wie man jetzt so weiter kommt .. mittleres aktuelles Datum für alle Datensätze, die in db verfügbar sind. ? Dies ist nur für einen Tag, aber ich brauche jetzt alle Aufzeichnungen über Worte. @ Jon
Muddasir Abbas

Berücksichtigt es die Ortszeit des Benutzers, wenn sich die Datensätze in UTC befinden?
Adry

1
@Adry: Ich bezweifle es, aber du solltest es sorgfältig testen.
Jon Skeet

62

Beachten Sie, dass das Ergebnis möglicherweise geringfügig von Ihren Erwartungen abweicht.

NOW()gibt a zurück DATETIME.

Und INTERVALfunktioniert wie genannt, z INTERVAL 1 DAY = 24 hours.

Wenn Ihr Skript also ausgeführt werden soll 03:00, wird es das verfehlen first three hours of records from the 'oldest' day.

Um den ganzen Tag zu nutzen CURDATE() - INTERVAL 1 DAY. Dies wird auf den Anfang des vorherigen Tages zurückgesetzt, unabhängig davon, wann das Skript ausgeführt wird.


Up Abstimmung für CURDATE ()
Rob



7

Ich habe keine richtigen Antworten mit DATE_ADDoder gesehen DATE_SUB:

1 Tag abziehen von NOW()

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

1 Tag ab hinzufügen NOW()

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

1

Wenn das Suchfeld ein Zeitstempel ist und Sie Datensätze von 0 Stunden gestern und 0 Stunden heute suchen möchten, verwenden Sie die Konstruktion

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

stattdessen

 now() - interval 1 day
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.