PostgreSQL

PostgreSQL 知识量:10 - 51 - 182

3.10 范围类型><

范围类型- 3.10.1 -

在 PostgreSQL 中,范围类型(range type)是一种特殊的数据类型,用于表示一个值的范围。范围类型可以用于各种用途,例如表示一个时间范围、数值范围或文本范围等。

PostgreSQL 提供了内置的范围类型,如 int4range、int8range、daterange 等,这些类型分别用于表示整数、长整数和日期的范围。此外,用户还可以定义自己的范围类型。

使用范围类型的好处包括:

  • 查询效率:由于范围类型存储了值的范围信息,因此在执行范围查询时通常比简单的等于或不等于查询更快。

  • 灵活性:范围类型允许用户表示更复杂的条件,而不仅仅是单个值。这使得查询和数据处理更加灵活。

  • 减少存储需求:对于包含大量重复值的数据列,使用范围类型可以节省存储空间,因为只需要存储范围的开始和结束值。

要在 PostgreSQL 中使用范围类型,首先需要确保已经创建了相应的范围类型。例如,要创建一个表示整数范围的列,可以使用以下 SQL 语句:

CREATE TABLE mytable (  
    id serial PRIMARY KEY,  
    price_range int4range  
);

然后,可以使用插入语句将范围值插入到表中:

INSERT INTO mytable (price_range) VALUES ('100-200');

要查询范围内的值,可以使用 PostgreSQL 提供的范围运算符,如 @>、<@、&& 等。例如:

SELECT * FROM mytable WHERE 150 <@ price_range;

这将返回所有价格在 150 以下的行。

范围类型的边界- 3.10.2 -

在 PostgreSQL 中,范围类型的边界表示范围的起始和结束值。每个范围类型都有两个边界:下界和上界。这些值之间的所有点都被包括在范围内。

  • 包含边界:当边界点本身被包括在范围内时,该边界被称为包含边界。在范围值的文本表示中,包含下界的边界用方括号“[”表示,而包含上界的边界用方括号“]”表示。

  • 排除边界:当边界点不被包括在范围内时,该边界被称为排除边界。在范围值的文本表示中,排除下界的边界用圆括号“(”表示,而排除上界的边界用圆括号“)”表示。

此外,范围类型还提供了函数来测试范围的边界是否包含或排除值。例如,lower_inc和upper_inc函数分别测试一个范围值的下界和上界是否包含边界点。这些函数对于处理范围类型非常有用,可以帮助确定范围内的值是否包括边界点。

需要注意的是,在使用范围类型时,需要注意处理空值和无限范围的情况。空值表示范围没有包含任何值,而无限范围表示范围没有上界或下界。

范围值的输入- 3.10.3 -

在 PostgreSQL 中,一个范围值的输入必须遵循以下模式之一:

  • (lower-bound,upper-bound):表示一个包含下界和上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。

  • (lower-bound,upper-bound]:表示一个包含下界但排除上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。

  • [lower-bound,upper-bound):表示一个排除下界但包含上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。

  • [lower-bound,upper-bound]:表示一个包含下界和上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。

  • empty:表示一个空范围,即不包含任何值的范围。

其中,lower-bound 和 upper-bound 可以是任何合法的 PostgreSQL 输入值,也可以是空值表示没有下界或上界。如果界限值包含圆括号、方括号、逗号、双引号或反斜线等特殊字符,则需要使用双引号字符引用它们。

范围类型运算符- 3.10.4 -

在 PostgreSQL 中,范围类型支持多种运算符,用于执行范围查询和操作。以下是一些常用的范围类型运算符:

  • @>:检查一个范围是否包含另一个范围。

  • <@:检查一个范围是否被另一个范围包含。

  • &&:检查两个范围是否有重叠部分。

  • <| 和 >|:检查一个范围是否在另一个范围的左侧或右侧。

  • -| 和 |-:检查一个范围是否在下界或上界大于另一个范围时与之相邻。

  • +:将一个范围的上下界进行增加或减少。

  • -:将一个范围的上下界进行减小。

  • << 和 >>:将一个范围的上下界向左或向右移动。

  • <-> 和 ->>:计算两个范围之间的距离。

  • <~~ 和 ~~>:对范围的边界进行排序比较。