> PostgreSQL9.6 中文手册 > 范围函数和操作符

9.19. 范围函数和操作符

范围类型的概述请见第 8.17 节。

表 9-49展示了范围类型可用的操作符。

表 9-49. 范围操作符

操作符 描述 例子 结果
= 等于 int4range(1,5) = '[1,4]'::int4range t
<> 不等于 numrange(1.1,2.2) <> numrange(1.1,2.3) t
< 小于 int4range(1,10) < int4range(2,3) t
> 大于 int4range(1,10) > int4range(1,5) t
<= 小于等于 numrange(1.1,2.2) <= numrange(1.1,2.2) t
>= 大于等于 numrange(1.1,2.2) >= numrange(1.1,2.0) t
@> 包含范围 int4range(2,4) @> int4range(2,3) t
@> 包含元素 '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp t
<@ 范围被包含 int4range(2,4) <@ int4range(1,7) t
<@ 元素被包含 42 <@ int4range(1,7) f
&& 重叠(有公共点) int8range(3,7) && int8range(4,12) t
<< 严格左部 int8range(1,10) << int8range(100,110) t
>> 严格右部 int8range(50,60) >> int8range(20,30) t
&< 不超过右部 int8range(1,20) &< int8range(18,20) t
&> 不超过左部 int8range(7,20) &> int8range(5,10) t
-|- 相邻 numrange(1.1,2.2) -|- numrange(2.2,3.3) t
+ numrange(5,15) + numrange(10,20) [5,20)
* int8range(5,15) * int8range(10,20) [10,15)
- int8range(5,15) - int8range(10,20) [5,10)

简单比较操作符<><=>=首先比较下界,并且只有在下界相等时才比较上界。这些比较通常对范围不怎么有用,但是还是提供它们以便能够在范围上构建 B树索引。

当涉及一个空范围时,左部/右部/相邻操作符总是返回假;即一个空范围被认为不在任何其他范围前面或者后面。

如果结果范围可能需要包含两个分离的子范围,并和差操作符将会失败,因为这样的范围无法被表示。

表 9-50显示可用于范围类型的函数。

表 9-50. 范围函数

函数 返回类型 描述 例子 结果
lower(anyrange) 范围的元素类型 范围的下界 lower(numrange(1.1,2.2)) 1.1
upper(anyrange) 范围的元素类型 范围的上界 upper(numrange(1.1,2.2)) 2.2
isempty(anyrange) boolean 范围为空? isempty(numrange(1.1,2.2)) false
lower_inc(anyrange) boolean 下界包含在内? lower_inc(numrange(1.1,2.2)) true
upper_inc(anyrange) boolean 上界包含在内? upper_inc(numrange(1.1,2.2)) false
lower_inf(anyrange) boolean 下界无限? lower_inf('(,)'::daterange) true
upper_inf(anyrange) boolean 上界无限? upper_inf('(,)'::daterange) true
range_merge(anyrange, anyrange) anyrange 最小范围其中包含两个给定范围 range_merge('[1,2)'::int4range, '[3,4)'::int4range) [1,4)

如果范围为空或者被请求的界是无限的,lowerupper函数返回空值。函数lower_incupper_inclower_infupper_inf对一个空范围全部返回假。

上一篇:
下一篇: