0

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

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

4

1 回答 1

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

一个更冗长但语法更清晰的版本是使用集合返回函数(SRF)作为FROM项目:

SELECT *
FROM   generate_series('2013-09-20'::date
                     , '2013-09-27'::date
                     , interval '1 day')::date;

考虑下面的评论。

于 2013-09-27T20:41:42.597 回答