dam*_*san 5 postgresql range upperbound
使用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
Run Code Online (Sandbox Code Playgroud)
让我们进一步检查:
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
Run Code Online (Sandbox Code Playgroud)
来自pg文档:
upper(anyrange)| 范围的元素类型| 范围的上限| upper(numrange(1.1,2.2))| 2.2
虽然3技术上是整数范围的上限[1,3) ? ? = {1, 2},但所有自然数≥2.我希望该upper函数返回范围的上限(最小上限).
我错过了什么吗?
发生这种情况是因为int4range是一个离散范围。这些范围总是自动转换为其规范表示,以便能够测试等效性,例如:
SELECT '[4,8]'::int4range = '(3,9)'::int4range
Run Code Online (Sandbox Code Playgroud)
内置范围类型
int4range、int8range和daterange都使用规范形式,其中包括下限并排除上限;那是,[)。但是,用户定义的范围类型可以使用其他约定。
| 归档时间: |
|
| 查看次数: |
1057 次 |
| 最近记录: |