9.19. 范围函数和操作符

参阅Section 8.17获取范围类型的概述。

Table 9-44显示了范围类型可用的操作符。

Table 9-44. 范围操作符

操作符 描述 示例 结果
= 等于 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-tree索引才提供的。

左于/右于/邻近操作符当包含空范围时也会返回false;也就是, 不认为空范围在其他范围之前或之后。

并集和差集操作符在结果范围需要包含两个不相交的子范围时失败,因此不能表示这样一个范围。

Table 9-45显示了可以和范围一起使用的函数。

Table 9-45. 范围函数

函数 返回类型 描述 示例 结果
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

如果范围是空或者需要的界限是无穷的,lowerupper 函数返回null。lower_inc, upper_inc, lower_infupper_inf函数均对空范围返回false。