2010-06-16 47 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