范围函数和操作符
范围函数和操作符¶
本节对范围类型数据的操作符和相关函数进行说明.
范围操作符**¶
下文展示了范围类型可用的操作符。
注意
- 简单比较操作符
<
、>
、<=
和>=
首先比较下界,并且只有在下界相等时才比较上界。这些比较通常对范围不怎么有用,但是还是提供它们以便能够在范围上构建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) ```
范围函数¶
下文显示可用于范围类型的函数。
注意
如果范围为空或者被请求的界是无限的,lower
和upper
函数返回空值。函数lower_inc
、upper_inc
、lower_inf
和upper_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) ```