返回列表,其中包含来自单个查询的指定范围内的日期

时间:2013-09-27 20:35:58

标签: sql postgresql generate-series set-returning-functions

我正在尝试获取范围内的日期列表,类似于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

关于如何实现这一目标的任何想法? 首选,不使用存储过程或函数,除非没有其他方法......

1 个答案:

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

考虑以下评论。

相关问题