Есть ли способ в операторе MySQL упорядочить записи (через отметку даты) с помощью> = NOW () -1, чтобы были выбраны все записи с предыдущего дня на будущее?
Есть ли способ в операторе MySQL упорядочить записи (через отметку даты) с помощью> = NOW () -1, чтобы были выбраны все записи с предыдущего дня на будущее?
Ответы:
Судя по документации для функций даты / времени , вы должны уметь делать что-то вроде:
SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
Имейте в виду, что результат может немного отличаться от ожидаемого.
NOW()
возвращает 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