我正在使用PostgreSQL 9.4,今天我发现了isTrainer
类型。到目前为止,我使用了字段 startDateTime 和其他字段 startEndTime ,那么使用Daterange
类型会有什么好处?
答案 0 :(得分:4)
对 Patricks answer 的一些补充:
NULL
tsrange
获取日期
select lower(tsrange('2020-12-01', '2020-12-01'));
返回 NULL
select tsrange('2020-12-20', '2020-12-19');
-- [22000] ERROR: range lower bound must be less than or equal to range upper bound
答案 1 :(得分:3)
使用startDateTime
(endDateTime
tsrange
可以对daterange
和date
做任何事情。 }} S)。然而,有相当多的operators on range types使得编写查询更加简洁和易懂。两个范围之间的重叠&&
,包含@>
和邻接-|-
等运算符对日期和时间范围特别有用。范围类型的一大好处是你对它们应用了gist
index,这使搜索速度更快。
例如,查找在特定时间范围内发生event
的所有行:
开始/结束强>
SELECT *
FROM events
WHERE startDateTime >= '2016-01-01'::timestamp
AND endDateTime < '2016-01-19'::timestamp;
<强>范围强>
SELECT *
FROM events
WHERE startEndRange <@ tsrange('2016-01-01'::timestamp, '2016-01-19'::timestamp);