使用 PostgreSQL 9.4:
SELECT x, lower(x), upper(x) FROM (SELECT '[1,2]'::numrange x) q;
> [1,2] | 1 | 2 -- looks OK
SELECT x, lower(x), upper(x) FROM (SELECT '[1,2]'::int4range x) q;
> [1,3) | 1 | >>3<< -- this is unexpected
让我们进一步检查:
SELECT x, lower(x), upper(x) FROM (SELECT '[1,3)'::numrange x) q1;
> [1,3) | 1 | 3 -- looks OK
SELECT x, lower(x), upper(x) FROM (SELECT '[1,3]'::numrange x) q1;
> [1,3] | 1 | 3 -- looks OK
来自 pg 文档:
上(任意范围) | range 的元素类型 | 范围上限 | 上(数字范围(1.1,2.2))| 2.2
虽然3
从技术上讲是整数范围的上限[1,3) ∩ ℕ = {1, 2}
,但所有自然数 ≥ 2 也是如此。我希望该upper
函数返回范围的上界(最小上限)。
我错过了什么吗?