【问题标题】:Postgres - split TSTZRANGE in two columnsPostgres - 将 TSTZRANGE 拆分为两列
【发布时间】:2017-05-05 13:31:34
【问题描述】:

我使用的是 PostgreSQL 9.4 我在一个名为timerange 的表中有列,并想编写一个SELECT 查询,它将在time_starttime_end 两个单独的列中返回时间范围。 我试图像处理数组一样处理它,但它不起作用:

select *, timerange[0] as t_start from schedules;

当前表:

| id |                    timerange                        |  
|----|-----------------------------------------------------|  
| 1  | ["2017-05-05 19:00:00+02","2017-05-05 21:00:00+02") |  
| 2  | ["2017-05-05 19:00:00+02","2017-05-05 21:00:00+02") |  

想要的表:

| id |        time_start        |       time_end           | 
|----|--------------------------|--------------------------|
| 1  | "2017-05-05 19:00:00+02" | "2017-05-05 21:00:00+02" |  
| 2  | "2017-05-05 19:00:00+02" | "2017-05-05 21:00:00+02" |  

【问题讨论】:

    标签: sql postgresql datetime date-range


    【解决方案1】:

    Uselower()upper()

    像这样:

    SELECT lower(tsrng) AS start, upper(tsrng) AS end
    FROM (
      SELECT tstzrange('2017-05-05 12:00:05', '2017-05-05 16:00:05', '[)') AS tsrng
    ) sub;
    

    或者你的例子:

    select *, lower(timerange) as t_start, upper(timerange) as t_end from schedules;
    

    【讨论】:

    • 工作就像一个魅力,但我认为时区丢失了,因为从这个时间范围 ["2017-05-05 14:00:00+02","2017-05-05 15:00:00+02") 我得到 t_start 等于 2017-05-05 14:00:00.000000
    • @veich The time-zone information is there。您的客户可能会解释响应并将其放入您当地的时区。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多