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?
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:
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
Beachten Sie, dass das Ergebnis möglicherweise geringfügig von Ihren Erwartungen abweicht.
NOW()
gibt a zurück DATETIME
.
Und INTERVAL
funktioniert 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.
Du bist fast da: es ist NOW() - INTERVAL 1 DAY
Sicher kannst du:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
dann -1 day
.
Ich habe keine richtigen Antworten mit DATE_ADD
oder 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)
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