====================== 范围函数和操作符 ====================== .. container:: sect1 :name: FUNCTIONS-RANGE .. container:: titlepage .. container:: .. container:: .. rubric:: 范围函数和操作符 :name: 范围函数和操作符 :class: title 范围类型的概述请见 `范围类型 <rangetypes.html>`__。 `表 范围操作符 <functions-range.html#RANGE-OPERATORS-TABLE>`__ 展示了范围类型可用的操作符。 .. list-table:: 范围操作符 :widths: 10 10 20 5 :header-rows: 1 :class: longtable * - 操作符 - 描述 - 例子 - 结果 * - ``=`` - 等于 - ``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树索引。 当涉及一个空范围时,左部/右部/相邻操作符总是返回假;即一个空范围被认为不在任何其他范围前面或者后面。 如果结果范围可能需要包含两个分离的子范围,并和差操作符将会失败,因为这样的范围无法被表示。 `表 范围函数 <functions-range.html#RANGE-FUNCTIONS-TABLE>`__\ 显示可用于范围类型的函数。 .. container:: table :name: RANGE-FUNCTIONS-TABLE .. list-table:: 范围函数 :widths: 8 6 8 12 4 :header-rows: 1 * - 函数 - 返回类型 - 描述 - 例子 - 结果 * - ``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`` * - ``range_merge`` ``(anyrange, anyrange)`` - ``anyrange`` - 包含两个给定范围的最小范围 - ``range_merge`` ``('[1,2)'::int4range, '[3,4)'::int4range)`` - ``[1,4)`` 如果范围为空或者被请求的界是无限的,\ ``lower``\ 和\ ``upper``\ 函数返回空值。函数\ ``lower_inc``\ 、\ ``upper_inc``\ 、\ ``lower_inf``\ 和\ ``upper_inf``\ 对一个空范围全部返回假。