我正在尝试获取范围内的日期列表,类似于PostgreSQL中的命令NOW(),唯一的区别是now()
,只返回当前日期。
如果我执行如下操作,我获得:
select now();
2013-09-27 15:27:50.303-05
或者通过示例,我可以这样做:
select now() - interval '1' day;
,结果是昨天
2013-09-27 15:27:50.303-05
我需要的是一个查询,它可以返回一个列表,其中包含给定范围内的每个日期,所以如果我提供2013-09-20和2013-09-27(我对小时数并不感兴趣,只有日期)我想获得如下输出:
2013-09-20
2013-09-21
2013-09-22
2013-09-23
2013-09-24
2013-09-25
2013-09-26
2013-09-27
关于如何实现这一目标的任何想法? 首选,不使用存储过程或函数,除非没有其他方法......
答案 0 :(得分:4)
使用 generate_series()
,完全您需要的内容:
SELECT generate_series('2013-09-20'::date
, '2013-09-27'::date
, interval '1 day')::date;
采用两个timestamp
变量,但也接受dates
返回timestamp with time zone
,因此我根据您的请求投放到date
。
更详细但语法更清晰的版本是使用set returns function(SRF)作为FROM
项:
SELECT *
FROM generate_series('2013-09-20'::date
, '2013-09-27'::date
, interval '1 day')::date;
考虑以下评论。