Получить строки менее чем за день - PullRequest
10 голосов
/ 16 ноября 2011

У меня есть столбец date, который имеет значение по умолчанию CURRENT_TIMESTAMP, например: 2011-11-16 15:34:02. Есть ли способ поместить условие в оператор mysql (не в php), чтобы получить строки, которые меньше чем один день? Что-то вроде:

SELECT * FROM orders where date > 24 hours ago

Ответы [ 5 ]

22 голосов
/ 16 ноября 2011

Вы можете использовать timestampadd(), чтобы получить метку времени для 24 часов назад

SELECT * FROM orders WHERE `date` > timestampadd(hour, -24, now());

Это эквивалентно

SELECT * FROM orders WHERE `date` > timestampadd(day, -1, now());
8 голосов
/ 16 ноября 2011
SELECT *
FROM orders
WHERE DATE(`date`) = DATE(NOW() - INTERVAL 1 DAY)

Обратите внимание на пробелы вокруг date, так как это зарезервированное слово.

0 голосов
/ 30 июня 2017

Этот оператор возвращает все сегодняшние строки:

select * from orders where date_field >= CURDATE();

CURDATE() возвращает сегодняшнюю дату, поэтому поиск записей начинается с полуночи.

0 голосов
/ 19 октября 2015

Вы можете также использовать разницу напрямую с функцией timestampdiff, которая похожа на timestampadd.

SELECT * FROM orders WHERE TIMESTAMPDIFF(HOUR, date, NOW()) > 24;

Я думаю, что это не так оптимизировано, как при использовании timestampadd (потому что он рассчитывает разницу для каждой строки), но, на мой взгляд, он более читабелен и является альтернативой, если вам не нужна оптимизация.

0 голосов
/ 16 ноября 2011

да, объедините * date_sub * с интервалом 1 день и curdate () и, возможно, что-то еще, см. Документацию здесь http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_date-sub

...