2017-05-05 70 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