2017-05-05 40 views
0

我使用PostgreSQL 9.4 我在一个名为timerange表有列,想写一个SELECT查询将返回的时间范围在两个单独的列time_starttime_end。 我试图处理这就像一个数组,但它不工作:Postgres的 - 分裂TSTZRANGE两列

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

当前表:

| id | - - - - - - - - - - -时间范围 - - - - - - - - - - - - - - ----------- |
| ---- | ------------------------------------------ -------------------------------- |
| 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”|

回答

4

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; 
+0

我加链接。如果你不介意 –

+0

就像一个魅力,但我认为,时区从该TIMERANGE'因为丢失[“2017-05-05 14:00:00 + 02”,“2017-05-05 15:00:00 + 02”)'我得到't_start'等于'2017-05-05 14:00:00 00.000000' – veich

+0

@veich [时区信息存在](http://rextester.com/VUCAL92330)。可能你的客户会解释这个响应,并把它放到你当地的时区。 – pozs