9.21. 范围/多范围函数和操作符 #
范围类型的概述可参见第 8.17 节。
表 9.59 显示了范围类型的专用操作符。表 9.60 显示了多范围类型的专用操作符。除此之外,表 9.1 中所示的常用比较操作符也适用于范围类型和多范围类型。比较操作符首先按范围下界排序,只有当它们相等时才比较上界。多范围操作符逐个比较范围,直到某个范围不相等为止。这通常不会导致有用的总体排序,但提供的操作符允许在范围上构造唯一索引。
表 9.59. 范围操作符
操作符 描述 示例 |
|---|
第一个范围中包含第二个(范围)吗?
|
范围是否包含元素?
|
第一个范围包含在第二个(范围)中吗?
|
元素是否包含在范围内?
|
范围是否重叠,也就是说,是否有相同的元素?
|
第一个范围是否严格地在第二个(范围)的左侧?
|
第一个范围是否严格地在第二个(范围)的右边?
|
第一个范围是否没有扩展到第二个(范围)的右侧?
|
第一个范围是否没有扩展到第二个(范围)的左侧?
|
范围是相邻的么?
|
计算范围的并集。范围必须重叠或相邻,这样的并集就是一个单一的范围(但请参见
|
计算范围的交集。
|
计算范围的差集。第二个范围不能以使差集无法表示为单个范围的方式包含在第一个范围中。
|
表 9.60. 多范围操作符
操作符 描述 示例 |
|---|
第一个多范围是否包含第二个?
|
多范围是否包含范围?
|
多范围是否包含元素?
|
范围是否包含多范围?
|
第一个多范围是否被第二个所包含?
|
多范围是否被范围所包含?
|
范围是否被多范围所包含?
|
元素是否包含在多范围内?
|
多范围是否重叠,也就是说,有任何共同的元素么?
|
多范围是否与范围重叠?
|
范围是否与多范围重叠?
|
第一个多范围是否完全在第二个左边?
|
多范围是否完全在范围左边?
|
范围是否完全在多范围左边?
|
第一个多范围是否完全在第二个的右边?
|
多范围是否完全在范围右边?
|
范围是否完全在多范围右边?
|
第一个多范围不扩展到第二个的右边吗?
|
多范围不扩展到范围的右边吗?
|
范围不扩展到多范围的右边吗?
|
第一个多范围不扩展到第二个的左边吗?
|
多范围不扩展到范围的左边吗?
|
范围不扩展到多范围的左边吗?
|
多范围是相邻的吗?
|
多范围与范围是相邻的吗?
|
范围与多范围是相邻的吗?
|
计算多范围的并集。多范围不需要重叠或相邻。
|
计算多范围的交集。
|
计算多范围的差集。
|
涉及空范围或空多范围时,左侧、右侧和相邻操作符总是返回假;也就是说,空范围不被视为位于任何其他范围之前或之后。
在其他运算中,空范围和空多范围被视为加法单位元:任何值与空范围或空多范围值求并集,结果仍是该值本身。任何值减去空范围或空多范围值,结果也仍是该值本身。空多范围与空范围具有完全相同的点。每个范围都包含空范围。每个多范围包含任意多个空范围。
如果结果范围需要包含两个不相交的子范围,范围并集和差集操作符会失败,因为这样的范围无法表示。另有接受多范围参数并返回多范围的并集和差集操作符,即使参数彼此不相交,也不会失败。因此,如果需要对可能不相交的范围求并集或差集,可以先将范围转换为多范围来避免错误。
表 9.61 显示可用于范围类型的函数。表 9.62 显示可用于多范围类型的函数。
表 9.61. 范围函数
表 9.62. 多范围函数
lower_inc、upper_inc、lower_inf 和 upper_inf 函数对空范围或空多范围都返回假。