Czy istnieje sposób w wyciągu MySQL, aby uporządkować rekordy (za pomocą znacznika daty) przez> = NOW () -1, aby zostały wybrane wszystkie rekordy od dnia poprzedzającego dzisiaj do przyszłości?
Czy istnieje sposób w wyciągu MySQL, aby uporządkować rekordy (za pomocą znacznika daty) przez> = NOW () -1, aby zostały wybrane wszystkie rekordy od dnia poprzedzającego dzisiaj do przyszłości?
Odpowiedzi:
Sądząc po dokumentacji funkcji daty / czasu , powinieneś być w stanie zrobić coś takiego:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Pamiętaj, że wynik może się nieco różnić od oczekiwanego.
NOW()
zwraca a DATETIME
.
I INTERVAL
działa jak nazwa, np INTERVAL 1 DAY = 24 hours
.
Więc jeśli skrypt jest cron'd do uruchomienia na 03:00
, to przegapić first three hours of records from the 'oldest' day
.
Aby uzyskać użytek przez cały dzień CURDATE() - INTERVAL 1 DAY
. Spowoduje to powrót do początku poprzedniego dnia, niezależnie od tego, kiedy skrypt zostanie uruchomiony.
Już prawie koniec: to jest NOW() - INTERVAL 1 DAY
Nie widziałem żadnych poprawnych odpowiedzi przy użyciu DATE_ADD
lub DATE_SUB
:
Odejmij 1 dzień od NOW()
...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)
Dodaj 1 dzień od NOW()
...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)
Oczywiście że możesz:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
wtedy -1 day
.
gdy pole wyszukiwania to znacznik czasu i chcesz znaleźć rekordy z 0 wczoraj i 0 godzin dzisiaj, użyj konstrukcji
MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))
zamiast
now() - interval 1 day