范围类型的概述可参见 Section 8.17 。
Table 9.50列出了可用于范围类型的操作符。
Table 9.50. 范围操作符
| 操作符 | 描述 | 示例 | 结果 |
|---|---|---|---|
= |
等于 | 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) |
- |
difference | int8range(5,15) - int8range(10,20) |
[5,10) |
简单比较操作符 <、>、<= 和 >= 首先比较下界,只有下界相等时才比较上界。这些比较对范围通常用处不大,但提供这些操作符可以在范围上建立 B-tree 索引。
涉及空范围时,左侧、右侧和相邻操作符总是返回假;也就是说,空范围不被视为位于任何其他范围之前或之后。
如果结果范围需要包含两个不相交的子范围,并集和差集操作符会失败,因为这样的范围无法表示。
Table 9.51列出了可用于范围类型的函数。
Table 9.51. 范围函数
| 函数 | 返回类型 | 描述 | 示例 | 结果 |
|---|---|---|---|---|
|
范围的元素类型 | 范围的下界 | lower(numrange(1.1,2.2)) |
1.1 |
|
范围的元素类型 | 范围的上界 | upper(numrange(1.1,2.2)) |
2.2 |
|
boolean |
范围是否为空? | isempty(numrange(1.1,2.2)) |
false |
|
boolean |
是否包含下界? | lower_inc(numrange(1.1,2.2)) |
true |
|
boolean |
是否包含上界? | upper_inc(numrange(1.1,2.2)) |
false |
|
boolean |
下界是否无穷? | lower_inf('(,)'::daterange) |
true |
|
boolean |
上界是否无穷? | upper_inf('(,)'::daterange) |
true |
|
anyrange |
包含两个给定范围的最小范围 | range_merge('[1,2)'::int4range, '[3,4)'::int4range) |
[1,4) |
如果范围为空,或请求的边界是无限的,lower 和 upper 函数返回空值。对于空范围,lower_inc、upper_inc、lower_inf 和 upper_inf 函数都返回假。