2011-10-27 88 views
2

我正在嘗試創建一系列從過去的固定日期到當前日期的日期,以月份爲增量。我知道這是8.4中可能的新功能,但現在我堅持8.3。在postgresql中創建日期系列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'))) ); 

但我開始認爲這是一個愚蠢的方式來獲得所需的日期系列。

回答

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 
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;