Wybierz rekordy od TERAZ () -1 dzień

148

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?

user1092780
źródło

Odpowiedzi:

289

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
Jon Skeet
źródło
jak dostać się teraz do tak dalej ... oznacza aktualną datę do wszystkich rekordów, które są dostępne w bazie danych. ? to jest tylko na jeden dzień, ale teraz potrzebuję nagrania na słowa. @jon
Muddasir Abbas
Czy uwzględnia czas lokalny użytkownika, gdy rekordy są w czasie UTC?
Adry,
1
@Adry: Wątpię, ale powinieneś dokładnie przetestować.
Jon Skeet,
66

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.

William Dan Terry
źródło
18

Już prawie koniec: to jest NOW() - INTERVAL 1 DAY

Sergey Kalinichenko
źródło
9

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)
Andrew Atkinson
źródło
Wygląda jakoś „czyściej”, ale też trochę „ciężko”. Czy naprawdę istnieje jakaś wartość dodana w jawnym wywołaniu metody zamiast prostego dodawania / odejmowania?
Balmipour
8

Oczywiście że możesz:

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
Marco Miltenburg
źródło
1
Mylące używanie DATE_ADDwtedy -1 day.
Andrew Atkinson,
1

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
Michael de Oz
źródło