PostgreSQL 知识量:10 - 51 - 182
在 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 以下的行。
在 PostgreSQL 中,范围类型的边界表示范围的起始和结束值。每个范围类型都有两个边界:下界和上界。这些值之间的所有点都被包括在范围内。
包含边界:当边界点本身被包括在范围内时,该边界被称为包含边界。在范围值的文本表示中,包含下界的边界用方括号“[”表示,而包含上界的边界用方括号“]”表示。
排除边界:当边界点不被包括在范围内时,该边界被称为排除边界。在范围值的文本表示中,排除下界的边界用圆括号“(”表示,而排除上界的边界用圆括号“)”表示。
此外,范围类型还提供了函数来测试范围的边界是否包含或排除值。例如,lower_inc和upper_inc函数分别测试一个范围值的下界和上界是否包含边界点。这些函数对于处理范围类型非常有用,可以帮助确定范围内的值是否包括边界点。
需要注意的是,在使用范围类型时,需要注意处理空值和无限范围的情况。空值表示范围没有包含任何值,而无限范围表示范围没有上界或下界。
在 PostgreSQL 中,一个范围值的输入必须遵循以下模式之一:
(lower-bound,upper-bound):表示一个包含下界和上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。
(lower-bound,upper-bound]:表示一个包含下界但排除上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。
[lower-bound,upper-bound):表示一个排除下界但包含上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。
[lower-bound,upper-bound]:表示一个包含下界和上界的范围。下界和上界之间用逗号分隔,并且下界必须小于或等于上界。
empty:表示一个空范围,即不包含任何值的范围。
其中,lower-bound 和 upper-bound 可以是任何合法的 PostgreSQL 输入值,也可以是空值表示没有下界或上界。如果界限值包含圆括号、方括号、逗号、双引号或反斜线等特殊字符,则需要使用双引号字符引用它们。
在 PostgreSQL 中,范围类型支持多种运算符,用于执行范围查询和操作。以下是一些常用的范围类型运算符:
@>:检查一个范围是否包含另一个范围。
<@:检查一个范围是否被另一个范围包含。
&&:检查两个范围是否有重叠部分。
<| 和 >|:检查一个范围是否在另一个范围的左侧或右侧。
-| 和 |-:检查一个范围是否在下界或上界大于另一个范围时与之相邻。
+:将一个范围的上下界进行增加或减少。
-:将一个范围的上下界进行减小。
<< 和 >>:将一个范围的上下界向左或向右移动。
<-> 和 ->>:计算两个范围之间的距离。
<~~ 和 ~~>:对范围的边界进行排序比较。
Copyright © 2017-Now pnotes.cn. All Rights Reserved.
编程学习笔记 保留所有权利
MARK:3.0.0.20240214.P35
From 2017.2.6