我正在使用 PostgreSQL 9.4,今天我发现了这个Daterange类型。到目前为止,我使用了一个字段startDateTime和另一个字段startEndTime,那么使用该Daterange类型有什么好处呢?
对帕特里克回答的一些补充:
NULL
tsrange
select lower(tsrange('2020-12-01', '2020-12-01'));回报NULLselect tsrange('2020-12-20', '2020-12-19');
-- [22000] ERROR: range lower bound must be less than or equal to range upper bound
Run Code Online (Sandbox Code Playgroud)
没有什么是你不能用 a 做的,startDateTime而 anendDateTime是你可以用 a tsrange(或daterangefor dates)做的。然而,有相当多的范围类型运算符使编写查询更加简洁和易于理解。两个范围之间的重叠&&、包含@>和邻接等运算符-|-对于日期和时间范围特别有用。范围类型的一大好处是您可以对它们应用gist索引,这使得搜索速度更快。
例如,查找event特定时间范围内发生 a 的所有行:
开始/结束
SELECT *
FROM events
WHERE startDateTime >= '2016-01-01'::timestamp
AND endDateTime < '2016-01-19'::timestamp;
Run Code Online (Sandbox Code Playgroud)
范围
SELECT *
FROM events
WHERE startEndRange <@ tsrange('2016-01-01'::timestamp, '2016-01-19'::timestamp);
Run Code Online (Sandbox Code Playgroud)