范围类型的概述可参见 第 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
函数对空范围(empty range)都返回假(false)。