🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
# 9.19\. 范围函数和操作符 参阅[Section 8.17](#calibre_link-1153)获取范围类型的概述。 [Table 9-44](#calibre_link-1983)显示了范围类型可用的操作符。 **Table 9-44\. 范围操作符** | 操作符 | 描述 | 示例 | 结果 | | --- | --- | --- | --- | | `=` | 等于 | `int4range(1,5) = '[1,4]'::int4range` | `t` | | `<>` | 不等于 | `numrange(1.1,2.2) <> numrange(1.1,2.3)` | `t` | | `<` | 小于 | `int4range(1,10) < int4range(2,3)` | `t` | | `>` | 大于 | `int4range(1,10) > int4range(1,5)` | `t` | | `<=` | 小于或等于 | `numrange(1.1,2.2) <= numrange(1.1,2.2)` | `t` | | `>=` | 大于或等于 | `numrange(1.1,2.2) >= numrange(1.1,2.0)` | `t` | | `@>` | 包含范围 | `int4range(2,4) @> int4range(2,3)` | `t` | | `@>` | 包含元素 | `'[2011-01-01,2011-03-01)'::tsrange @> '2011-01-10'::timestamp` | `t` | | `<@` | 范围包含于 | `int4range(2,4) <@ int4range(1,7)` | `t` | | `<@` | 元素包含于 | `42 <@ int4range(1,7)` | `f` | | `&&` | 重叠 (有共同点) | `int8range(3,7) && int8range(4,12)` | `t` | | `<<` | 严格在左 | `int8range(1,10) << int8range(100,110)` | `t` | | `>>` | 严格在右 | `int8range(50,60) >> int8range(20,30)` | `t` | | `&<` | 没有延伸到右边 | `int8range(1,20) &< int8range(18,20)` | `t` | | `&>` | 没有延伸到左边 | `int8range(7,20) &> int8range(5,10)` | `t` | | `-|-` | 相邻 | `numrange(1.1,2.2) -|- numrange(2.2,3.3)` | `t` | | `+` | 并集 | `numrange(5,15) + numrange(10,20)` | `[5,20)` | | `*` | 交集 | `int8range(5,15) * int8range(10,20)` | `[10,15)` | | `-` | 差集 | `int8range(5,15) - int8range(10,20)` | `[5,10)` | 简单的比较操作符`<`,`>`,`<=` 和`>=`先比较下界,只有下界相等时才比较上界。 这种比较通常对范围不是很好用,但是为了在范围中允许构建B-tree索引才提供的。 左于/右于/邻近操作符当包含空范围时也会返回false;也就是, 不认为空范围在其他范围之前或之后。 并集和差集操作符在结果范围需要包含两个不相交的子范围时失败,因此不能表示这样一个范围。 [Table 9-45](#calibre_link-1984)显示了可以和范围一起使用的函数。 **Table 9-45\. 范围函数** | 函数 | 返回类型 | 描述 | 示例 | 结果 | | --- | --- | --- | --- | --- | | ``lower`(``anyrange`) | 范围元素类型 | 范围的下界 | `lower(numrange(1.1,2.2))` | `1.1` | | ``upper`(``anyrange`) | 范围元素类型 | 范围的上界 | `upper(numrange(1.1,2.2))` | `2.2` | | ``isempty`(``anyrange`) | `boolean` | 范围是空的? | `isempty(numrange(1.1,2.2))` | `false` | | ``lower_inc`(``anyrange`) | `boolean` | 包涵下界? | `lower_inc(numrange(1.1,2.2))` | `true` | | ``upper_inc`(``anyrange`) | `boolean` | 包含上界? | `upper_inc(numrange(1.1,2.2))` | `false` | | ``lower_inf`(``anyrange`) | `boolean` | 下界无穷? | `lower_inf('(,)'::daterange)` | `true` | | ``upper_inf`(``anyrange`) | `boolean` | 上界无穷? | `upper_inf('(,)'::daterange)` | `true` | 如果范围是空或者需要的界限是无穷的,`lower`和`upper` 函数返回null。`lower_inc`, `upper_inc`, `lower_inf`和`upper_inf`函数均对空范围返回false。