Создание серии дат в postgresql 8.3 - PullRequest
2 голосов
/ 27 октября 2011

Я пытаюсь создать серию дат от фиксированной даты в прошлом до текущей даты с шагом в месяц. Я знаю, что это возможно в 8.4 с новой функцией, но я застрял с 8.3 на данный момент.

Я чувствую, что спускаюсь по кроличьей норе, так как у меня есть этот sql, чтобы получать ежемесячные приращения

SELECT  date('2008-01-01') + (to_char(a,'99')||' month')::interval as date FROM generate_series(0,20) as a;

Затем я пытаюсь извлечь месяцы и годы из интервала текущей даты - фиксированной даты

SELECT extract(   month from interval (age(current_date, date('2008-01-01')))     );

но я начинаю думать, что это глупый способ получить желаемый ряд дат.

Ответы [ 2 ]

4 голосов
/ 27 октября 2011

Может работать так:

SELECT ('2008-01-01 0:0'::timestamp
       + interval '1 month' * generate_series(0, months))::date
FROM   (
   SELECT (extract(year from intv) * 12
          + extract(month from intv))::int4 AS months
   FROM   (SELECT age(now(), '2008-01-01 0:0'::timestamp) as intv) x
   ) y
0 голосов
/ 22 июля 2013

В случае, если кому-то понадобится, например, 3-часовой интервал в заданном диапазоне дат:

SELECT ('2013-01-01 0:0'::timestamp
       + interval '1 hour' * generate_series(0, ('2013-02-01'::date - '2013-01-01'::date)*24, 3))::timestamp;
...