【问题标题】:Generating a series of time ranges between two dates in Postgresql (recurring time slots)在 Postgresql 中生成两个日期之间的一系列时间范围(循环时隙)
【发布时间】:2017-10-28 00:57:57
【问题描述】:

我正在尝试在两个日期之间和特定时间段内生成一系列 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 最新版本中是否可行?

【问题讨论】:

    标签: sql postgresql


    【解决方案1】:

    这样的事情怎么样:

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

    【讨论】:

      猜你喜欢
      • 2012-12-16
      • 1970-01-01
      • 2018-06-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-12-11
      • 2021-12-19
      • 1970-01-01
      相关资源
      最近更新 更多