2009-12-11 3 views

ответ

80
SELECT * 
FROM table_name 
WHERE table_name.the_date > DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
+2

Если записи хранятся как 'DATETIME', это будет выбирать все записи с предыдущей даты, без учета временной части. Пробег в '23: 59: 59', запрос вернет все записи за последние 48 часов, а не' 24'. – Quassnoi

+13

Если вы хотите выбрать последние 24 часа из поля datetime, замените 'curate()' на 'now()'. Это также включает время. – Haentz

3
select ... 
from ... 
where YourDateColumn >= getdate()-1 
397

В MySQL:

SELECT * 
FROM mytable 
WHERE record_date >= NOW() - INTERVAL 1 DAY 

В SQL Server:

SELECT * 
FROM mytable 
WHERE record_date >= DATEADD(day, -1, GETDATE()) 

В Oracle:

SELECT * 
FROM mytable 
WHERE record_date >= SYSDATE - 1 

В PostgreSQL:

SELECT * 
FROM mytable 
WHERE record_date >= NOW() - '1 day'::INTERVAL 

В Redshift:

SELECT * 
FROM mytable 
WHERE record_date >= GETDATE() - '1 day'::INTERVAL 

В SQLite:

SELECT * 
FROM mytable 
WHERE record_date >= datetime('now','-1 day') 

В MS Access:

SELECT * 
FROM mytable 
WHERE record_date >= (Now - 1) 
+2

Я пытаюсь выполнить запрос для mysql, но если его 2AM, например, я получаю записи с 00 до 02 AM. Два часа, а не 24. Любые идеи? – Manos

+0

Мне очень нравится предлагаемое решение, только то, что я заметил в MySQL, - это производительность решения _Guillaume Flandre_ была быстрее. – oneworld

+1

Отличный ответ! – Bertie

8

Какого SQL не был определен, SQL 2005/2008

SELECT yourfields from yourTable WHERE yourfieldWithDate > dateadd(dd,-1,getdate()) 

Если вы находитесь на 2008 году увеличился типы даты точности, а затем использовать функцию нового sysdatetime() вместо этого, в равной степени при использовании UTC раз внутренне поменять в UTC звонки.

0

В SQL Server (За последние 24 часа):

SELECT * 
FROM mytable 
WHERE order_date > DateAdd(DAY, -1, GETDATE()) and order_date<=GETDATE() 
+1

Зачем вам нужно добавлять "и order_date <= GETDATE()", когда вы уже ищите последние 24 часа в момент выхода этого запроса? Нет смысла иметь эту часть в предложении where, когда у вас есть «GETDATE», уже упомянутый в первом. Вам лучше сделать это «order_date> = DateAdd (DAY, -1, GETDATE())» вот оно! – KMX

6

в Postgres, предполагается, что ваш тип поля является отметка о времени:

выберите * из таблицы, где date_field> (теперь() - интервал «24 часа»);

16

MySQL:

SELECT * 
FROM table_name 
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 24 HOUR) 

Интервал может быть в год, месяц, день, час, минута, секунда

К примеру, за последние 10 минут

SELECT * 
FROM table_name 
WHERE table_name.the_date > DATE_SUB(NOW(), INTERVAL 10 MINUTE) 
+1

Это ответ, который наилучшим образом отвечает на конкретный вопрос: как вернуть PRECEDING 24 HOURS (с настоящего момента), в отличие от предыдущих 24 (который предлагает все результаты за предыдущий день). Это отвечало моим требованиям, это дает мне преимущество. EDIT: Стоит отметить столбец table_name.the_date, который должен быть отметкой времени. –

4

Если рассматриваемая временная метка является отметкой времени UNIX Вам необходимо сначала преобразовать отметку времени UNIX (например, 1462567865) в timestamp mysql или данные

SELECT * FROM `orders` WHERE FROM_UNIXTIME(order_ts) > DATE_SUB(CURDATE(), INTERVAL 1 DAY) 
0

Привет, теперь я прошел через много времени с оригинального сообщения, но у меня возникла аналогичная проблема, и я хочу поделиться.

У меня есть поле datetime с этим форматом YYYY-MM-DD hh: mm: ss, и я хочу получить доступ целый день, так что вот мое решение.

Функция DATE(), в MySQL: извлечение части даты выражения даты или даты и времени.

SELECT * FROM `your_table` WHERE DATE(`your_datatime_field`)='2017-10-09' 

с этим я получаю весь регистр строк в этот же день.

Я надеюсь, что это поможет любому.

Смежные вопросы