9.19. 范围函数和操作符
范围类型的概述请见第 8.17 节。
表 9.50展示了范围类型可用的操作符。
表 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) |
- |
差 | int8range(5,15) - int8range(10,20) |
[5,10) |
简单比较操作符<
、 >
、<=
和 >=
首先比较下界,并且只有在下界相等时才比较上界。这些比较通常对范围不怎么有用,但是还是提供它们以便能够在范围上构建 B树索引。
当涉及一个空范围时,左部/右部/相邻操作符总是返回假;即一个空范围被认为不在任何其他范围前面或者后面。
如果结果范围可能需要包含两个分离的子范围,并和差操作符将会失败,因为这样的范围无法被表示。
表 9.51显示可用于范围类型的函数。
表 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
对一个空范围全部返回假。
本文转自PostgreSQL中文社区,原文链接:9.19. 范围函数和操作符