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 INTERVALdział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_ADDlub 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_ADDwtedy -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