Как вывести список записей с датой за последние 10 дней?


Ответы:


192

Да, это работает в PostgreSQL (при условии, что столбец « дата » имеет тип данных date) Почему бы вам просто не попробовать?

Стандартный формат ANSI SQL:

SELECT Table.date 
FROM Table 
WHERE date > current_date - interval '10' day;

Я предпочитаю этот формат, так как он упрощает чтение (но он такой же, как current_date - 10).


1
Запрос должен быть таким: SELECT Table.date FROM Table WHERE date> current_date - interval '10 days ';
user2694306 06

4
@ user2694306: interval '10 day'синтаксис Postgres. interval '10' dayэто синтаксис, основанный на стандарте SQL и также поддерживаемый Postgres
a_horse_with_no_name 06

1
интервал должен быть 9 . 10 фактически дает вам 11 дней назад с сегодняшнего дня.
Дэвид Хе

1
@DavidHe: это то же самое, что и исходный ответ. Который использует 10, а не9
a_horse_with_no_name

3
Просто примечание: на Redshift работает формула @ user2694306: интервал «10 дней». интервал «10 дней» не работает на Redshift.
Бен

34

http://www.postgresql.org/docs/current/static/functions-datetime.html показывает операторы, которые можно использовать для работы с датами и временем (и интервалами).

Так ты хочешь

SELECT "date"
FROM "Table"
WHERE "date" > (CURRENT_DATE - INTERVAL '10 days');

Вышеуказанные операторы / функции подробно описаны:


9

Насколько я понимаю из моего тестирования (и PostgreSQL dox ), кавычки нужно делать иначе, чем в других ответах, и они также должны включать «день», например:

SELECT Table.date
  FROM Table 
  WHERE date > current_date - interval '10 day';

Продемонстрировано здесь (вы сможете запустить это на любой базе данных Postgres):

SELECT DISTINCT current_date, 
                current_date - interval '10' day, 
                current_date - interval '10 days' 
  FROM pg_language;

Результат:

2013-03-01  2013-03-01 00:00:00 2013-02-19 00:00:00

На самом деле, я не заметил, что Брэдли ответил правильно. В любом случае, я оставлю свой здесь как доказательство того, что это правильный путь. Принятый ответ неверен (по крайней мере, для версии Postgre, которую я использую)
Очень Нерегулярно

0

Я бы проверил типы данных.

current_date имеет тип данных date, 10 - это число, а Table.date - вам нужно посмотреть свою таблицу.


0

вы также можете использовать между:

SELECT Table.date
  FROM Table 
  WHERE date between current_date and current_date - interval '10 day';

betweenДолжен быть с наименьшим значением первого, так что это будет сделано правильно , как SELECT Table.date FROM Table WHERE date between current_date - interval '10 day' and current_date;
тип

0

Просто обобщите запрос, если вы хотите работать с любой заданной датой вместо текущей даты:

SELECT Table.date
  FROM Table 
  WHERE Table.date > '2020-01-01'::date - interval '10 day'
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.