Выберите записи СЕЙЧАС () -1 день

Есть ли способ в операторе MySQL упорядочить записи (через отметку даты) с помощью>= NOW() -1, чтобы были выбраны все записи за день до сегодняшнего дня?

7 ответов

Решение

Судя по документации для функций даты / времени, вы должны быть в состоянии сделать что-то вроде:

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

Имейте в виду, что результат может немного отличаться от ожидаемого.

NOW() возвращает DATETIME,

А также INTERVAL работает как указано, например INTERVAL 1 DAY = 24 hours,

Так что, если ваш скрипт cron'd для запуска в 03:00пропустит first three hours of records from the 'oldest' day,

Чтобы весь день использовать CURDATE() - INTERVAL 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)

Ты почти там: это NOW() - INTERVAL 1 DAY

Что вы можете:

SELECT * FROM table
WHERE DateStamp > 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

попробуйте это:SELECT * FROM FOOWHERE MY_DATE_FIELD >= NOW() - INTERVAL '1' DAY

Другие вопросы по тегам