Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Postgres - split TSTZRANGE in two columns

I'm using PostgreSQL 9.4 I have column in a table named timerange and want to write a SELECT query which will return time range in two separate columns time_start and time_end. I tried to handle this like an array but it doesn't work:

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

Current table:

| 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") |  

Desired table:

| 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" |  
like image 385
veich Avatar asked Dec 07 '22 18:12

veich


1 Answers

Use lower() and upper().

Like this:

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;

Or your example:

select *, lower(timerange) as t_start, upper(timerange) as t_end from schedules;
like image 118
Łukasz Kamiński Avatar answered Dec 10 '22 07:12

Łukasz Kamiński