Список возврата с датами в указанном диапазоне из одного запроса

Я пытаюсь получить список дат в пределах диапазона, аналогично команде NOW() в PostgreSQL, с той лишь разницей, что now(), возвращает только текущую дату.

Если я выполню это следующим образом, я получу:

select now();

2013-09-27 15:27:50.303-05

Или, например, я мог бы сделать это:

select now() - interval '1' day;

и результат вчера

2013-09-27 15:27:50.303-05

Мне нужен запрос, который может возвращать список с каждой датой в заданном диапазоне, поэтому, если я укажу 2013-09-20 и 2013-09-27 (меня не интересуют часы, только даты), я бы хотел получить вывод следующим образом:

2013-09-20
2013-09-21
2013-09-22
2013-09-23
2013-09-24
2013-09-25
2013-09-26
2013-09-27

Есть идеи, как этого добиться? По предпочтению без использования хранимых процедур или функций, если нет другого пути...

1 ответ

Решение

Использование generate_series(), делает именно то , что вам нужно:

SELECT generate_series('2013-09-20'::date
                     , '2013-09-27'::date
                     , interval '1 day')::date;

Занимает два timestamp переменные, но dates также принимаются.
Возвращает timestamp with time zone поэтому я бросил date в соответствии с Вашим запросом.

Более подробная, но синтаксически более понятная версия - использовать функцию возврата набора (SRF) в качестве FROM вещь:

SELECT *
FROM   generate_series('2013-09-20'::date
                     , '2013-09-27'::date
                     , interval '1 day')::date;

Рассмотрите комментарии ниже.

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