On this page
9.19. 范围函数和运算符
有关范围类型的概述,请参见Section 8.17。
Table 9.50显示可用于范围类型的运算符。
表 9.50. 范围运算符
Operator | Description | Example | Result |
---|---|---|---|
= |
equal | int4range(1,5) = '[1,4]'::int4range |
t |
<> |
not equal | numrange(1.1,2.2) <> numrange(1.1,2.3) |
t |
< |
less than | int4range(1,10) < int4range(2,3) |
t |
> |
greater than | 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 |
@> |
contains range | int4range(2,4) @> int4range(2,3) |
t |
@> |
contains element | '[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 |
+ |
union | numrange(5,15) + numrange(10,20) |
[5,20) |
* |
intersection | int8range(5,15) * int8range(10,20) |
[10,15) |
- |
difference | int8range(5,15) - int8range(10,20) |
[5,10) |
简单比较运算符<
,>
,<=
和>=
首先比较下限,并且只有在相等时才比较上限。这些比较通常对于范围不是很有用,但是提供这些比较是为了允许在范围上构造 B 树索引。
当涉及到空范围时,左/右/相邻运算符始终返回 false;也就是说,不将空范围视为任何其他范围之前或之后。
如果结果范围需要包含两个不相交的子范围,则合并运算符和差异运算符将失败,因为这样的范围无法表示。
Table 9.51显示了可用于范围类型的功能。
表 9.51. 范围功能
Function | Return Type | Description | Example | Result |
---|---|---|---|---|
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) |
如果范围为空或请求的边界为无限,则lower
和upper
函数返回 null。 lower_inc
,upper_inc
,lower_inf
和upper_inf
函数对于空范围均返回 false。