问题
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" |
回答1:
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;
来源:https://stackoverflow.com/questions/43806314/postgres-split-tstzrange-in-two-columns