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?

user1092780
quelle

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
Jon Skeet
quelle
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.

William Dan Terry
quelle
Up Abstimmung für CURDATE ()
Rob
17

Du bist fast da: es ist NOW() - INTERVAL 1 DAY

dasblinkenlight
quelle
8

Sicher kannst du:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
Marco Miltenburg
quelle
Verwirrend mit DATE_ADDdann -1 day.
Andrew Atkinson
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)
Andrew Atkinson
quelle
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
Michael de Oz
quelle