Виберіть записи з NOW () -1 день


138

Чи є в операторі MySQL спосіб замовити записи (через штамп дати) за допомогою> = ЗАРАЗ () -1, щоб були обрані всі записи за день до сьогодні?

Відповіді:


269

Судячи з документації щодо функцій дати / часу , ви повинні мати можливість робити щось на кшталт:

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY

як зараз дістатись до цього значення. середня поточна дата для всіх записів, доступних у db. ? це лише на один день, але мені потрібно все записати на слова. @jon
Muddasir Abbas

Чи враховує місцевий час користувача, коли записи знаходяться в UTC?
Адрі

1
@Adry: я сумніваюся в цьому, але ви повинні ретельно перевірити.
Джон Скіт

62

Будьте в курсі, що результат може бути дещо іншим, ніж ви очікували.

NOW()повертає a DATETIME.

І INTERVALпрацює як названо, напр INTERVAL 1 DAY = 24 hours.

Отже, якщо ваш сценарій запускається на Cron 03:00, він буде пропущений first three hours of records from the 'oldest' day.

Щоб отримати цілий день використання CURDATE() - INTERVAL 1 DAY. Це повернеться до початку попереднього дня незалежно від того, коли виконується сценарій.


Голосувати за CURDATE ()
пограбувати



8

Неправильно бачили відповіді, використовуючи DATE_ADDабо DATE_SUB:

Відняти 1 день від NOW()

...WHERE DATE_FIELD >= DATE_SUB(NOW(), INTERVAL 1 DAY)

Додайте 1 день з NOW()

...WHERE DATE_FIELD >= DATE_ADD(NOW(), INTERVAL 1 DAY)

1

коли в полі пошуку розмічається часова марка, і ви хочете знайти записи з 0 годин вчора та 0 годин сьогодні, використовуйте конструкцію

MY_DATE_TIME_FIELD between makedate(year(now()), date_format(now(),'%j')-1) and makedate(year(now()), date_format(now(),'%j'))  

замість цього

 now() - interval 1 day
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.