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?

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

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.



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)

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


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.