在Postgresql中生成两个日期之间的一系列时间范围(经常性时间段)

时间:2017-10-27 15:44:29

标签: sql postgresql

我正在尝试在两个日期和特定时段之间生成一系列tstzrange。

例如,我想创建一个时间序列,包括每天2017年10月27日至2017年11月27日UTC时间下午5点至晚上9点之间。

以下伪代码失败但希望说明我正在努力实现的目标:

select *
from generate_series(
    tstzrange(timezone('UTC', '2017-10-27 17:00'), timezone('UTC', '2017-10-27 21:00'), '[]'),
    tstzrange(timezone('UTC', '2017-11-27 17:00'), timezone('UTC', '2017-11-27 21:00'), '[]'),
    '1 day'::interval) timeslots;

我想要的结果是(自然地调整时区):

["2017-10-27 17:00:00-04","2017-10-27 21:00:00-04"]
["2017-10-28 17:00:00-04","2017-10-28 21:00:00-04"]
["2017-10-29 17:00:00-04","2017-10-29 21:00:00-04"]
                         .
                         .
                         .
["2017-11-25 17:00:00-04","2017-11-25 21:00:00-04"]
["2017-11-26 17:00:00-04","2017-11-26 21:00:00-04"]
["2017-11-27 17:00:00-04","2017-11-27 21:00:00-04"]

这是否可以在Postgresql中使用,最新版本?

1 个答案:

答案 0 :(得分:2)

这样的事情怎么样:

select
    tstzrange(
        date + interval '17 hours',
        date + interval '21 hours'
    ) timeslots
from
    generate_series(
        '2017-10-27'::date,
        '2017-11-27',
        '1 day'
    ) date;