历史版本。 PostgreSQL 9.4 已结束支持。 2020-02-13. 请参阅 当前版本手册.
9.19. 范围函数和操作符 #
范围类型的概述可参见第 8.17 节。
表 9.47列出了可用于范围类型的操作符。
表 9.47. 范围操作符
| 操作符 | 描述 | 示例 | 结果 |
|---|---|---|---|
= | 等于 | 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.48列出了可用于范围类型的函数。
表 9.48. 范围函数
| 函数 | 返回类型 | 描述 | 示例 | 结果 |
|---|---|---|---|---|
| 范围的元素类型 | 范围的下界 | 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 |
如果范围为空,或请求的边界是无限的,lower 和 upper 函数返回 null。对于空范围,lower_inc、upper_inc、lower_inf 和 upper_inf 函数都返回假。