范围类型
发布日期:2021-05-08 12:28:23 浏览次数:16 分类:精选文章

本文共 2078 字,大约阅读时间需要 6 分钟。

PostgreSQL 范围类型详解

目录

  • 文档用途
  • 内建范围类型
  • 范围操作符
  • 范围函数
  • 有边界的范围
  • 无边界的范围
  • 构建范围

文档用途

范围类型在PostgreSQL中起着重要作用,因为它们能够明确地表示某一范围内所有元素的值集合。这种类型特别适用于需要表达连续值范围的场景,如时间和日期等。通过使用范围类型,可以有效地表示范围重叠等概念,极大地简化了数据查询和操作。

内建范围类型

PostgreSQL 提供了多种内建范围类型,每种类型对应不同的数据元素。这些类型主要包括:

  • int4range:用于整数范围,支持4字节整数。
  • int8range:用于大整数范围,支持8字节整数。
  • numrange:用于数值范围,支持浮点数和整数。
  • tsrange:不带时区的时间戳范围。
  • tstzrange:带时区的时间戳范围。
  • daterange:日期范围。
  • 此外,用户还可以定义自定义范围类型以满足特定需求。

    范围操作符

    PostgreSQL 提供了丰富的操作符用于范围的查询和操作。以下是一些常用的操作符及其作用和示例:

    操作符 描述 示例 结果
    = 等于 int4range(2,7) = '[2,6]'::int4range true
    < > 不等于 numrange(2.1,3.2) < > numrange(2.1,3.3) true
    < 小于 int4range(2,7) < int4range(3,5) true
    > 大于 int4range(2,7) > int4range(2,5) true
    <= 小于等于 int4range(2,7) <= int4range(2,7) true
    >= 大于等于 int4range(2,7) >= int4range(2,5) true
    @> 包含 int4range(2,7) @> int4range(2,5) true
    <@ 包含 int4range(2,5) <@ int4range(1,6) true
    && 重叠 int4range(2,5) && int4range(1,6) true
    << 严格左 int4range(2,5) << int4range(1,10) true
    >> 严格右 int4range(7,10) >> int4range(2,5) true
    <-> int4range(2,20) - int4range(5,30) [2,5)
    + int4range(2,20) + int4range(5,30) [2,30)
    * int4range(2,20) * int4range(5,30) [5,20)
    - int4range(2,20) - int4range(5,30) [2,5)

    范围函数

    PostgreSQL 提供了一系列函数用于操作和检验范围。以下是一些常用函数及其描述:

    函数 返回类型 描述
    lower(anyrange) 元素类型 返回范围的下界
    upper(anyrange) 元素类型 返回范围的上界
    isempty(anyrange) boolean 判断范围是否为空
    lower_inc(anyrange) boolean 判断下界是否包含在内
    upper_inc(anyrange) boolean 判断上界是否包含在内
    lower_inf(anyrange) boolean 判断下界是否无限
    upper_inf(anyrange) boolean 判断上界是否无限
    range_merge(anyrange, anyrange) boolean 判断两个范围的最小范围是否包含在内

    有边界的范围

    每个非空范围都有明确的下界和上界。下界和上界的包含性由特定的字符决定:

    • 包含下界:[lower-bound, upper-bound]
    • 不包含下界:(lower-bound, upper-bound]
    • 包含上界:[lower-bound, upper-bound)
    • 不包含上界:(lower-bound, upper-bound)

    无边界的范围

    某些范围类型支持无边界的概念:

    • 下界无限:[lower-bound, infinity)
    • 上界无限:(lower-bound, infinity)
    • 同时无界:(infinity, infinity)

    这些无界范围可以用于表示时间戳、坐标等领域中的无限概念。

    构建范围

    PostgreSQL 提供了构造器函数来创建范围。这些函数接受下界、上界以及边界包含性的文本参数。例如:

    tsrange('2018-10-31 12:00:00', '2018-11-11 00:00:00', '[]')

    如果第三个参数省略,则默认为包含下界和排除上界。

    注意事项

    • 范围的输入必须遵循特定的格式,确保下界和上界的正确性。
    • 有些范围类型支持通过null值来表示无界边界。
    • 在使用范围类型时,需谨慎处理无界范围,以避免潜在的性能问题。

    如需了解更多详细信息,请访问【瀚高技术支持平台】。

    上一篇:PostgreSQL V10 分区表特性
    下一篇:禁用CPU导致的HBA卡不可用

    发表评论

    最新留言

    不错!
    [***.144.177.141]2025年04月14日 14时14分01秒