使用generate_series()为每天生成30天的日期范围?

时间:2015-12-16 18:13:53

标签: postgresql set date-arithmetic generate-series

我的目标是使用PostgreSQL创建一个看起来像这样的表:

date           date_start        date_end
12/16/2015     11/17/2015        12/16/2015
12/17/2015     11/18/2015        12/17/2015
etc.

这样我就可以加入另一个表来获取滚动30天窗口中每个日期的聚合。我一直在做一些研究,我认为generate_series()是我想要使用的,但我不确定。

1 个答案:

答案 0 :(得分:1)

这样的事情:

SELECT '2015-12-16'::date + g - 30 AS date_start
     , '2015-12-16'::date + g      AS date_end
FROM   generate_series (0, 25) g; -- number of rows

我跳过了多余的date列。 (不管怎样,你不应该使用基本类型名称作为标识符。)

generate_series()的变体适用于时间戳,但生成integer数字的简单版本对日期同样有用。也许更好,因为你可以避免与时区混淆。

始终将ISO 8601格式用于日期文字,这与任何datestyle或区域设置无关。

相关: