Создание серии дат в postgresql 8.3

Я пытаюсь создать серию дат от фиксированной даты в прошлом до текущей даты с шагом в месяц. Я знаю, что это возможно в 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')))     );

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


person Arthur    schedule 27.10.2011    source источник


Ответы (2)


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

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
person Erwin Brandstetter    schedule 27.10.2011

В случае, если кому-то понадобится, например. 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;
person remo    schedule 22.07.2013