我正在尝试在两个日期和特定时段之间生成一系列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中使用,最新版本?
答案 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;