2010-06-16 52 views
1

我需要創建PostgreSQL函數生成表/陣列在PostgreSQL函數飛

CREATE FUNCTION date_ranges (_start date, end date) 
    RETURNING TABLE(day_in_range date) AS... 

如果我叫date_ranges( '2010-06-01',2010-06-05' ) 我應該接受

2010-06-01 
2010-06-02 
2010-06-03 
2010-06-04 
2010-06-05 

任何想法如何做到這一點?

+0

看看最後一個例子:HTTP:// WWW。 postgresql.org/docs/8.2/static/functions-srf.html – 2010-06-16 23:54:45

回答

5

如果你是PostgreSQL的8.4:

SELECT generate_series(_start ::timestamp,_end ::timestamp,'1 day'); 

例子:

postgres=# SELECT generate_series('2010-06-01'::timestamp, 
postgres-# '2010-06-05'::timestamp,'1 day')::date; 
generate_series 
----------------- 
2010-06-01 
2010-06-02 
2010-06-03 
2010-06-04 
2010-06-05 

在舊版本:

SELECT '2010-06-01'::date + step FROM 
generate_series(0,'2010-06-05'::date - '2010-06-01'::date,1) AS t(step); 
+0

作品完美 - 謝謝(特別是對於舊版本,我使用8.1) - bensiu – bensiu 2010-06-17 03:04:18

+2

8.1今年將成爲EOL,開始升級到更新的版本。 – 2010-06-17 07:48:26