范围类型的概览请参见 Section 8.17。
Table 9.58 展示了可用于范围类型的专用操作符。 Table 9.59 展示了可用于多范围类型的专用操作符。 除此之外, Table 9.1 中展示的常规比较操作符也可用于范围和多范围类型。 比较操作符首先按范围的下界排序, 只有在下界相等时才比较上界。 多范围操作符会逐个比较每个范围, 直到有一个不相等为止。 这通常不会产生一个有用的整体排序, 但提供这些操作符是为了允许在范围上构建唯一索引。
Table 9.58. 范围操作符
操作符 说明 示例 |
|---|
第一个范围是否包含第二个?
|
该范围是否包含该元素?
|
第一个范围是否被包含在第二个之中?
|
该元素是否被包含在该范围之内?
|
这些范围是否重叠, 即是否有任何公共元素?
|
第一个范围是否严格位于第二个的左边?
|
第一个范围是否严格位于第二个的右边?
|
第一个范围是否没有延伸到第二个的右边?
|
第一个范围是否没有延伸到第二个的左边?
|
这些范围是否相邻?
|
计算范围的并集。
这些范围必须重叠或相邻,
以使并集成为一个单一的范围
(但请参见
|
计算这些范围的交集。
|
计算范围的差集。 第二个范围不得以这样的方式被包含在第一个范围中, 以致于差集不会是一个单一的范围。
|
Table 9.59. 多范围操作符
操作符 说明 示例 |
|---|
第一个多范围是否包含第二个?
|
该多范围是否包含该范围?
|
该多范围是否包含该元素?
|
该范围是否包含该多范围?
|
第一个多范围是否被包含在第二个之中?
|
该多范围是否被包含在该范围之内?
|
该范围是否被包含在该多范围之内?
|
该元素是否被包含在该多范围之内?
|
这些多范围是否重叠, 即是否有任何公共元素?
|
该多范围是否与该范围重叠?
|
该范围是否与该多范围重叠?
|
第一个多范围是否严格位于第二个的左边?
|
该多范围是否严格位于该范围的左边?
|
该范围是否严格位于该多范围的左边?
|
第一个多范围是否严格位于第二个的右边?
|
该多范围是否严格位于该范围的右边?
|
该范围是否严格位于该多范围的右边?
|
第一个多范围是否没有延伸到第二个的右边?
|
该多范围是否没有延伸到该范围的右边?
|
该范围是否没有延伸到该多范围的右边?
|
第一个多范围是否没有延伸到第二个的左边?
|
该多范围是否没有延伸到该范围的左边?
|
该范围是否没有延伸到该多范围的左边?
|
这些多范围是否相邻?
|
该多范围是否与该范围相邻?
|
该范围是否与该多范围相邻?
|
计算多范围的并集。 多范围无需重叠或相邻。
|
计算多范围的交集。
|
计算多范围的差集。
|
当涉及一个空范围或多范围时, 左侧/右侧/相邻操作符总是返回假; 也就是说, 一个空范围不被认为位于任何其他范围之前或之后。
在其他方面, 空范围和多范围被当作加法单位元: 任何与空值做并集的东西都是它自身。 任何减去一个空值的东西都是它自身。 一个空多范围与一个空范围拥有完全相同的点。 每个范围都包含空范围。 每个多范围都包含任意多的空范围。
如果结果范围需要包含两个不相交的子范围, 那么范围并集和差集操作符会失败, 因为这样的范围无法被表示。 对于并集和差集, 还有单独的操作符, 它们接受多范围参数并返回一个多范围, 即使它们的参数不相交也不会失败。 因此, 如果你需要对可能不相交的范围执行并集或差集操作, 可以先把你的范围转换为多范围来避免错误。
Table 9.60 展示了可用于范围类型的函数。 Table 9.61 展示了可用于多范围类型的函数。
Table 9.60. 范围函数
Table 9.61. 多范围函数
对于一个空的范围或多范围,
lower_inc、
upper_inc、
lower_inf 和
upper_inf
函数全都返回假。