更新时间:2026-04-10 GMT+08:00
分享

范围操作符

范围操作符用于处理范围类型数据的运算(如 @>、&&)。范围操作符支持直接应用于查询表达式,快速筛选特定区间内的数据,常用于范围比较、查询限制及区间界定。

  • 比较操作符<、>、<=和>=先比较下界,只有下界相等时才比较上界。
  • <<、>>和-|-操作符当包含空范围时也会返回false,即不认为空范围在其他范围之前或之后。
  • 并集和差集操作符的执行结果无法包含两个不相交的子范围。

操作符

描述

用法示例

=

等于

比较两个范围是否相等,返回t,表示相等。

1
2
3
4
5
SELECT int4range(1,5) = '[1,4]'::int4range AS RESULT;
 result
--------
 t
(1 row)

<>

不等于

比较两个范围是否不相等,返回t,表示不相等。

1
2
3
4
5
SELECT numrange(1.1,2.2) <> numrange(1.1,2.3) AS RESULT;
 result
--------
 t
(1 row)

<

小于

比较(1,10)是否小于(2,3),先比较下界,且只有在下界相等时才比较上界。

1
2
3
4
5
SELECT int4range(1,10) < int4range(2,3) AS RESULT;
 result
--------
 t
(1 row)

>

大于

比较(1,10)是否大于(1,5),先比较下界,且只有在下界相等时才比较上界。

1
2
3
4
5
SELECT int4range(1,10) > int4range(1,5) AS RESULT;
 result
--------
 t
(1 row)

<=

小于或等于

比较(1.1,2.2) 是否小于或等于(1.1,2.2)。

1
2
3
4
5
SELECT numrange(1.1,2.2) <= numrange(1.1,2.2) AS RESULT;
 result
--------
 t
(1 row)

>=

大于或等于

比较(1.1,2.2) 是否大于等于(1.1,2.0),先比较下界,且只有在下界相等时才比较上界。

1
2
3
4
5
SELECT numrange(1.1,2.2) >= numrange(1.1,2.0) AS RESULT;
 result
--------
 t
(1 row)

@>

包含范围、包含元素

(2,4)是否包含(2,3),返回t,表示包含。

1
2
3
4
5
SELECT int4range(2,4) @> int4range(2,3) AS RESULT;
 result
--------
 t
(1 row)

[2011-01-01,2011-03-01)是否包含2011-01-10,返回t,表示包含。

1
2
3
4
5
SELECT '[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp AS RESULT;
 result
--------
 t
(1 row)

<@

范围包含于、元素包含于

(2,4)是否包含于(1,7),返回t,表示包含。

1
2
3
4
5
SELECT int4range(2,4) <@ int4range(1,7) AS RESULT;
 result
--------
 t
(1 row)

元素42是否包含于(1,7),返回f,表示不包含。

1
2
3
4
5
SELECT 42 <@ int4range(1,7) AS RESULT;
 result
--------
 f
(1 row)

&&

重叠(有共同点)

判断(3,7)和(4,12)的范围是否重叠,返回t,表示存在重叠部分。

1
2
3
4
5
SELECT int8range(3,7) && int8range(4,12) AS RESULT;
 result
--------
 t
(1 row)

<<

范围值是否比另一个范围值的最小值还小(没有交集)

判断左边的范围值是否比右边范围值的最小值还小,且两者没有交集。

1
2
3
4
5
SELECT int8range(1,10) << int8range(100,110) AS RESULT;
 result
--------
 t
(1 row)

>>

范围值是否比另一个范围值的最大值还大(没有交集)

判断左边的范围值是否比右边范围值的最大值还大,且两者没有交集。

1
2
3
4
5
SELECT int8range(50,60) >> int8range(20,30) AS RESULT;
 result
--------
 t
(1 row)

&<

不超过右边范围上界。

判断左边的范围值是否不超过右边范围值的上界。

1
2
3
4
5
SELECT int8range(1,20) &< int8range(18,20) AS RESULT;
 result
--------
 t
(1 row)

&>

不超过左边范围上界。

判断右边的范围值是否不超过左边范围值的上界。

1
2
3
4
5
SELECT int8range(7,20) &> int8range(5,10) AS RESULT;
 result
--------
 t
(1 row)

-|-

相邻

判断范围是否相邻,返回t,表示相邻。

1
2
3
4
5
SELECT numrange(1.1,2.2) -|- numrange(2.2,3.3) AS RESULT;
 result
--------
 t
(1 row)

+

并集

计算两个区间的并集,结果返回新的区间[5,20)。

1
2
3
4
5
SELECT numrange(5,15) + numrange(10,20) AS RESULT;
 result 
--------
 [5,20)
(1 row)

*

交集

计算两个区间的交集,结果返回新的区间[10,15)。

1
2
3
4
5
SELECT int8range(5,15) * int8range(10,20) AS RESULT;
 result  
---------
 [10,15)
(1 row)

-

差集

计算两个区间的差集,结果返回新的区间 [5,10)。

1
2
3
4
5
SELECT int8range(5,15) - int8range(10,20) AS RESULT;
 result 
--------
 [5,10)
(1 row)

相关文档