我有上限为无穷大的范围。
为什么这个范围不包含无穷大?
我希望这会返回 true:
=> select '[2019-01-02, infinity]'::daterange @> 'infinity'::date;
?column?
----------
f
(1 row)
因为:
=> select 'infinity'::date = 'infinity'::date;
?column?
----------
t
(1 row)
最佳答案
Also, some element types have a notion of “infinity”, but that is just another value so far as the range type mechanisms are concerned. For example, in timestamp ranges,
[today,]
means the same thing as[today,)
. But[today,infinity]
means something different from[today,infinity)
— the latter excludes the special timestamp valueinfinity
.
这似乎与您的观察完全矛盾,因为
SELECT 'infinity'::date;
date
----------
infinity
(1 row)
对此行为的解释是 PostgreSQL 将“离散”类型(date
和 integer
类型)的范围转换为它们的“规范”表示:
SELECT '[2010-01-01,2010-02-28]'::daterange;
daterange
-------------------------
[2010-01-01,2010-03-01)
(1 row)
这就是您的示例中发生的情况:PostgreSQL 将 infinity
加 1(这不会更改值)并将包含上限转换为独占上限。
现在可以说这不是正确的行为,因为现在 infinity
不再是区间的一部分。我已经为此发送了一个补丁,并用 commit e6feef571a 修复了它.
关于postgresql - 为什么 `infinity` 不包含在范围内?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55905326/