9.19. 范围函数和运算符

有关范围类型的概述,请参见Section 8.17

Table 9.50显示可用于范围类型的运算符。

表 9.50. 范围运算符

OperatorDescriptionExampleResult
=equalint4range(1,5) = '[1,4]'::int4ranget
<>not equalnumrange(1.1,2.2) <> numrange(1.1,2.3)t
<less thanint4range(1,10) < int4range(2,3)t
>greater thanint4range(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
@>contains rangeint4range(2,4) @> int4range(2,3)t
@>contains element'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestampt
<@范围包含在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
+unionnumrange(5,15) + numrange(10,20)[5,20)
*intersectionint8range(5,15) * int8range(10,20)[10,15)
-differenceint8range(5,15) - int8range(10,20)[5,10)

简单比较运算符<><=>=首先比较下限,并且只有在相等时才比较上限。这些比较通常对于范围不是很有用,但是提供这些比较是为了允许在范围上构造 B 树索引。

当涉及到空范围时,左/右/相邻运算符始终返回 false;也就是说,不将空范围视为任何其他范围之前或之后。

如果结果范围需要包含两个不相交的子范围,则合并运算符和差异运算符将失败,因为这样的范围无法表示。

Table 9.51显示了可用于范围类型的功能。

表 9.51. 范围功能

FunctionReturn TypeDescriptionExampleResult
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函数返回 null。 lower_incupper_inclower_infupper_inf函数对于空范围均返回 false。