↑↓ 选择↵ 打开⌫ 切换范围完整搜索

PG.CENTER 连接 PostgreSQL 文档、百科与生态知识。由 Pigsty 维护。

支持中的版本: 当前版本 (18) / 17 / 16 / 15 / 14
开发中的版本: 19 / 20devel
已结束支持的版本: 13 / 12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2
历史版本。 PostgreSQL 13 已结束支持。 2025-11-13. 请参阅 当前版本手册.

9.20. 范围函数和操作符 #

范围类型的概述可参见第 8.17 节。

表 9.53 显示了范围类型的专用操作符。除此之外,表 9.1 中所示的常用比较操作符也适用于范围类型。比较操作符首先按范围下界排序,只有当它们相等时才比较上界。这通常不会导致有用的总体排序,但提供的操作符允许在范围上构造惟一索引。

表 9.53. 范围操作符

操作符

描述

示例

anyrange @> anyrange → boolean

第一个范围中包含第二个(范围)吗?

int4range(2,4) @> int4range(2,3) → t

anyrange @> anyelement → boolean

范围是否包含元素?

'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp → t

anyrange <@ anyrange → boolean

第一个范围包含在第二个(范围)中吗?

int4range(2,4) <@ int4range(1,7) → t

anyelement <@ anyrange → boolean

元素是否包含在范围内?

42 <@ int4range(1,7) → f

anyrange && anyrange → boolean

范围是否重叠,也就是说,是否有相同的元素?

int8range(3,7) && int8range(4,12) → t

anyrange << anyrange → boolean

第一个范围是否严格地在第二个(范围)的左侧?

int8range(1,10) << int8range(100,110) → t

anyrange >> anyrange → boolean

第一个范围是否严格地在第二个(范围)的右边?

int8range(50,60) >> int8range(20,30) → t

anyrange &< anyrange → boolean

第一个范围是否没有扩展到第二个(范围)的右侧?

int8range(1,20) &< int8range(18,20) → t

anyrange &> anyrange → boolean

第一个范围是否没有扩展到第二个(范围)的左侧?

int8range(7,20) &> int8range(5,10) → t

anyrange -|- anyrange → boolean

范围是相邻的么?

numrange(1.1,2.2) -|- numrange(2.2,3.3) → t

anyrange + anyrange → anyrange

计算范围的并集。范围必须重叠或相邻,这样的并集就是一个单一的范围(请参见 range_merge())。

numrange(5,15) + numrange(10,20) → [5,20)

anyrange * anyrange → anyrange

计算范围的交集。

int8range(5,15) * int8range(10,20) → [10,15)

anyrange - anyrange → anyrange

计算范围的差集。第二个范围不能以使差集无法表示为单个范围的方式包含在第一个范围中。

int8range(5,15) - int8range(10,20) → [5,10)


涉及空范围时,左侧、右侧和相邻操作符总是返回假;也就是说,空范围不被视为位于任何其他范围之前或之后。

表 9.54 列出了可用于范围类型的函数。

表 9.54. 范围函数

函数

描述

示例

lower ( anyrange ) → anyelement

提取范围的下界(如果范围为空或下界为无限,则为 NULL)。

lower(numrange(1.1,2.2)) → 1.1

upper ( anyrange ) → anyelement

提取范围的上界(如果范围为空或上界为无限,则为 NULL)。

upper(numrange(1.1,2.2)) → 2.2

isempty ( anyrange ) → boolean

范围为空吗?

isempty(numrange(1.1,2.2)) → f

lower_inc ( anyrange ) → boolean

范围的下界是否包含在内?

lower_inc(numrange(1.1,2.2)) → t

upper_inc ( anyrange ) → boolean

范围的上界是否包含在内?

upper_inc(numrange(1.1,2.2)) → f

lower_inf ( anyrange ) → boolean

范围的下界是无限的吗?

lower_inf('(,)'::daterange) → t

upper_inf ( anyrange ) → boolean

范围的上界是无限的吗?

upper_inf('(,)'::daterange) → t

range_merge ( anyrange, anyrange ) → anyrange

计算包含两个给定范围的最小范围。

range_merge('[1,2)'::int4range, '[3,4)'::int4range) → [1,4)


lower_inc、upper_inc、lower_inf 和 upper_inf 函数对空范围都返回假。

报告文档问题

阅读 上游文档. 反馈更正前请先核对 当前版本手册.