Список возврата с датами в указанном диапазоне из одного запроса
Я пытаюсь получить список дат в пределах диапазона, аналогично команде 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;
Рассмотрите комментарии ниже.