在postgresql 8.3中创建日期系列

时间:2011-10-27 09:26:59

标签: date postgresql series

我正在尝试创建一系列日期,从过去的固定日期到当前日期,以月为增量。我知道这可以在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 个答案:

答案 0 :(得分:4)

可以像这样工作:

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

答案 1 :(得分:0)

如果有人需要,例如在给定日期范围内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;