连续的数据系列被称为范围数据。PostgreSQL数据库支持一系列的数据类型,这是该数据库的一个独特功能。范围和多范围数据类型是在PostgreSQL第14版中引入的。这种数据类型存储低值和高值。整数或时间戳值可以存储在这种数据类型的字段中。当需要在一个单一的范围值中存储许多值时,最好使用范围数据类型。下面提到了PostgreSQL支持的内置数据类型的范围。
| 范围类型 | 目的 |
|---|---|
| int4range | 它定义了整数的范围。 |
| int4multirange | 它定义了多范围的整数。 |
| int8range | 它定义了大整数的范围。 |
| int8multirange | 它定义了多范围的大整数。 |
| numrange | 它定义了数字的范围。 |
| nummultirange | 它定义了数字的多范围。 |
| tsrange | 它定义了不含时区的时间戳范围。 |
| tsmultirange | 它定义了不含时区的时间戳的多范围。 |
| tstzrange | 它定义了带有时区的时间戳范围。 |
| tstzmultirange | 它定义了带有时区的时间戳的多范围。 |
| daterange | 它定义了日期的范围。 |
| datemultirange | 它定义了日期的多范围。 |
前提条件。
在执行本教程中的SQL语句之前,你必须在Linux操作系统上安装最新版本的PostgreSQL包。运行下面的命令来安装和启动PostgreSQL。
sudosystemctl start postgresql.service
运行下面的命令,以root权限登录到PostgreSQL。
$ sudo -upostgres psql
PostgreSQL的范围数据类型例子。
在创建任何具有布尔数据类型的表之前,你必须先创建一个PostgreSQL数据库。因此,运行下面的命令来创建一个名为**"testdb "的数据库。**
# CREATE DATABASE testdb;
创建数据库后会出现以下输出。

A. 使用整数范围数据类型
在当前数据库中创建一个名为**'tbl_intRange'的表,有两个字段。这里,第一个字段名是id**,它是表的主键。当有新的记录插入时,这个字段的值将自动递增。第二个字段名是int_range,数据类型是INT4RANGE。
# CREATE TABLE tbl_intRange (
idSERIAL PRIMARY KEY,
int_range INT4RANGE) 。
如果表被成功创建,将出现以下输出。

运行下面的INSERT查询,向tbl_intRange表中插入三条记录。
# INSERT INTO tbl_intRange (int_range)
VALUES('[1, 10)':int4range),
('[1, 20)'::int4range),
('[1, 30)'::int4range)。
执行上述查询后会出现以下输出。

运行下面的SELECT查询来读取tbl_intRange中的所有记录**。**
# SELECT*FROM tbl_intRange;
运行下面的SELECT查询,从tbl_intRange中读取那些记录,其中int_range大于12。
# SELECT*FROM tbl_intRange WHERE int_range@>12;
执行上述SELECT查询后,将出现以下输出。

B. 数字范围数据类型的使用
在当前数据库中创建一个名为**'tbl_numRange'的表,有两个字段。这里,第一个字段名是id**,是表的主键。当有新的记录插入时,这个字段的值将自动递增。第二个字段名是num_range,数据类型是NUMRANGE。
# CREATE TABLE tbl_numRange (
idSERIAL PRIMARY KEY,
num_range NUMRANGE) 。
运行下面的INSERT查询,向tbl_numRange表中插入三条记录。
# INSERT INTO tbl_numRange (num_range)
VALUES(numrange(20, 40)),
(numrange(100,500) );
执行上述查询后,将出现以下输出。

运行下面的SELECT查询,将从tbl_numRange中读取所有记录。
# SELECT*FROM tbl_numRange;
执行上述SELECT查询后,将出现以下输出。

C. 使用时间戳范围数据类型
在当前数据库中创建一个名为**'tbl_timeRange'的表,有两个字段。这里,第一个字段名是id**,它是表的主键。当有新的记录插入时,这个字段的值会自动递增。第二个字段名是timeRange,数据类型是TSRANGE。
# CREATE TABLE tbl_timeRange (
idSERIAL PRIMARY KEY,
timeRange TSRANGE);
运行下面的INSERT查询,向tbl_timeRange表中插入三条记录。
# INSERT INTO tbl_timeRange ( timeRange)
VALUES('[2022-05-20 10:20:30, 2022-05-21 10:20:15)'),
('[2022-09-13 9:30:15, 2022-09-14 11:10:20)')。
执行上述查询后,将出现以下输出。

运行下面的SELECT查询,将从tbl_timeRange中读取所有记录**。**
# SELECT*FROM tbl_timeRange;
执行上述SELECT查询后,将出现以下输出结果。

D. 使用日期范围数据类型
在当前数据库中创建一个名为**'tbl_dateRange'的表,有两个字段。这里,第一个字段名是id**,是表的主键。当有新的记录插入时,这个字段的值将会自动增加。第二个字段名是date_range,数据类型是DATERANGE。
# CREATE TABLE tbl_dateRange (
idSERIAL PRIMARY KEY,
date_range DATERANGE);
运行下面的INSERT查询,向tbl_dateRange表中插入三条记录。
# INSERT INTO tbl_dateRange ( date_range)
VALUES('[2022-05-20, 2022-05-21)'),
('[2022-07-10, 2022-07-15)'),
('[2022-12-01, 2022-12-16)');
执行上述查询后,将出现以下输出。

运行下面的SELECT查询,它将从tbl_dateRange中读取所有记录**。**
# SELECT*FROM tbl_dateRange;
运行下面的SELECT查询,从tbl_dateRange中读取那些date_range字段的日期值大于**'2002-07-13'的记录。**
# SELECT*FROM tbl_dateRange WHERE date_range@>'2022-07-13'::date;
执行上述查询后会出现以下输出。

结论
在本教程中,通过使用多个表,已经展示了PostgreSQL的范围数据类型的不同用途。 新的PostgreSQL用户在读完本教程后将能够在他们的表中使用范围数据类型。