跳转至

范围函数和操作符

范围函数和操作符

本节对范围类型数据的操作符和相关函数进行说明.

范围操作符**

下文展示了范围类型可用的操作符。

注意

  • 简单比较操作符<><=>=首先比较下界,并且只有在下界相等时才比较上界。这些比较通常对范围不怎么有用,但是还是提供它们以便能够在范围上构建B树索引。

当涉及一个空范围时,左部/右部/相邻操作符总是返回假;即一个空范围被认为不在任何其他范围前面或者后面。

如果结果范围可能需要包含两个分离的子范围,并和差操作符将会失败,因为这样的范围无法被表示。

=
描述
等于
示例
``` sql seaboxsql=# select int4range(1,5) = '[1,4]'::int4range; ?column?
t (1 row) ```
<>
描述
不等于
示例
``` sql seaboxsql=# select numrange(1.1,2.2) <> numrange(1.1,2.3); ?column?
t (1 row) ```
<
描述
小于
示例
``` sql seaboxsql=# select int4range(1,10) < int4range(2,3); ?column?
t (1 row) ```
>
描述
大于
示例
``` sql seaboxsql=# select int4range(1,10) > int4range(1,5); ?column?
t (1 row) ```
<=
描述
小于等于
示例
``` sql seaboxsql=# select numrange(1.1,2.2) <= numrange(1.1,2.2); ?column?
t (1 row) ```
>=
描述
大于等于
示例
``` sql seaboxsql=# select numrange(1.1,2.2) >= numrange(1.1,2.0); ?column?
t (1 row) ```
@>
描述
包含范围或元素
示例

``` sql seaboxsql=# select int4range(2,4) @> int4range(2,3); ?column?


t (1 row)

seaboxsql=# select '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp; ?column?


t (1 row) ```

<@
描述
范围或元素被包含
示例

``` sql seaboxsql=# select int4range(2,4) <@ int4range(1,7); ?column?


t (1 row)

seaboxsql=# select 42 <@ int4range(1,7); ?column?


f (1 row) ```

&&
描述
重叠(有公共点)
示例
``` sql seaboxsql=# select int8range(3,7) && int8range(4,12); ?column?
t (1 row) ```
<<
描述
严格左部
示例
``` sql seaboxsql=# select int8range(1,10) << int8range(100,110); ?column?
t (1 row) ```
>>
描述
严格右部
示例
``` sql seaboxsql=# select int8range(50,60) >> int8range(20,30); ?column?
t (1 row) ```
&<
描述
不超过右部
示例
``` sql seaboxsql=# select int8range(1,20) &< int8range(18,20); ?column?
t (1 row) ```
&>
描述
不超过左部
示例
``` sql seaboxsql=# select int8range(7,20) &> int8range(5,10); ?column?
t (1 row) ```
-|-
描述
相邻
示例
``` sql seaboxsql=# select numrange(1.1,2.2) -|- numrange(2.2,3.3); ?column?
t (1 row) ```
+
描述
示例
``` sql seaboxsql=# select numrange(5,15) + numrange(10,20); ?column?
[5,20) (1 row) ```
*
描述
示例
``` sql seaboxsql=# select int8range(5,15) * int8range(10,20); ?column?
[10,15) (1 row) ```
-
描述
示例
``` sql seaboxsql=# select int8range(5,15) - int8range(10,20); ?column?
[5,10) (1 row) ```

范围函数

下文显示可用于范围类型的函数。

注意

如果范围为空或者被请求的界是无限的,lowerupper函数返回空值。函数lower_incupper_inclower_infupper_inf对一个空范围全部返回假。

lower()
语法
lower(anyrange)
返回类型
范围的元素类型
描述
范围的下界
示例
``` sql seaboxsql=# select lower(numrange(1.1,2.2)); lower
1.1 (1 row) ```
upper()
语法
upper(anyrange)
返回类型
范围的元素类型
描述
范围的上界
示例
``` sql seaboxsql=# select upper(numrange(1.1,2.2)); upper
2.2 (1 row) ```
isempty()
语法
isempty(anyrange)
返回类型
boolean
描述
范围为空?
示例
``` sql seaboxsql=# select isempty(numrange(1.1,2.2)); isempty
f (1 row) ```
lower_inc()
语法
lower_inc(anyrange)
返回类型
boolean
描述
下界包含在内?
示例
``` sql seaboxsql=# select lower_inc(numrange(1.1,2.2)); lower_inc
t (1 row) ```
upper_inc()
语法
upper_inc(anyrange)
返回类型
boolean
描述
上界包含在内?
示例
``` sql seaboxsql=# select upper_inc(numrange(1.1,2.2)); upper_inc
f (1 row) ```
lower_inf()
语法
lower_inf(anyrange)
返回类型
boolean
描述
下界无限?
示例
``` sql seaboxsql=# select lower_inf('(,)'::daterange); lower_inf
t (1 row) ```
upper_inf()
语法
upper_inf(anyrange)
返回类型
boolean
描述
上界无限?
示例
``` sql seaboxsql=# select upper_inf('(,)'::daterange); upper_inf
t (1 row) ```
range_merge()
语法
range_merge(anyrange,anyrange)
返回类型
anyrange
描述
包含两个给定范围的最小范围
示例
``` sql seaboxsql=# select range_merge('[1,2)'::int4range, '[3,4)'::int4range); range_merge
[1,4) (1 row) ```