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

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


person user1092780    schedule 17.12.2011    source источник


Ответы (6)


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

SELECT * FROM FOO
WHERE MY_DATE_FIELD >= NOW() - INTERVAL 1 DAY
person Jon Skeet    schedule 17.12.2011
comment
как получить сейчас и так далее .. средняя текущая дата для всех записей, которые доступны в db. ? это всего лишь на один день, но мне нужно, чтобы все записывались на словах. @jon - person Muddasir Abbas; 03.09.2015
comment
Учитывает ли он местное время пользователя, когда записи находятся в формате UTC? - person Adry; 17.07.2018
comment
@Adry: Я сомневаюсь в этом, но вы должны тщательно протестировать. - person Jon Skeet; 17.07.2018

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

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

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

Поэтому, если ваш скрипт запускается cron на 03:00, он пропустит first three hours of records from the 'oldest' day.

Чтобы получить целый день, используйте CURDATE() - INTERVAL 1 DAY. Это вернется к началу предыдущего дня независимо от того, когда был запущен скрипт.

person William Dan Terry    schedule 06.06.2014

Вы почти у цели: это NOW() - INTERVAL 1 DAY

person Sergey Kalinichenko    schedule 17.12.2011

Не видел правильных ответов с использованием 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)
person Andrew Atkinson    schedule 03.08.2018
comment
Выглядит как-то чище, но тоже немного тяжеловато. Действительно ли есть какая-то дополнительная ценность в явном вызове метода, а не в использовании простого сложения / вычитания? - person Balmipour; 03.09.2020

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

SELECT * FROM table
WHERE DateStamp > DATE_ADD(NOW(), INTERVAL -1 DAY)
person Marco Miltenburg    schedule 17.12.2011
comment
Непонятно использование DATE_ADD, затем -1 day. - person Andrew Atkinson; 03.08.2018

когда поле поиска - это временная метка, и вы хотите найти записи с 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
person Michael de Oz    schedule 20.07.2016