Чи є в операторі MySQL спосіб замовити записи (через штамп дати) за допомогою> = ЗАРАЗ () -1, щоб були обрані всі записи за день до сьогодні?
Чи є в операторі MySQL спосіб замовити записи (через штамп дати) за допомогою> = ЗАРАЗ () -1, щоб були обрані всі записи за день до сьогодні?
Відповіді:
Судячи з документації щодо функцій дати / часу , ви повинні мати можливість робити щось на кшталт:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Будьте в курсі, що результат може бути дещо іншим, ніж ви очікували.
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
. Це повернеться до початку попереднього дня незалежно від того, коли виконується сценарій.
Ви майже там: це NOW() - INTERVAL 1 DAY
Впевнені, що можете:
SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
DATE_ADD
тоді -1 day
.
Неправильно бачили відповіді, використовуючи 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)
коли в полі пошуку розмічається часова марка, і ви хочете знайти записи з 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