GBase 8c
其他
文章

GBase 8c 数据类型-范围类型 之 内建范围类型

发表于2023-12-07 09:12:3035次浏览1个评论

范围类型是表达某种元素类型值的范围的数据类型,这种元素类型称为称为范围的subtype。例如,timestamp的范围,可用来表达一个会议室被保留的时间范围。在这种情况下,范围的数据类型是tsrange(timestamp range的简写),范围subtype的数据类型为timestamp。subtype必须具有某种总体的顺序,保证元素值是在范围值之内。范围值界限是清楚的。
 

 

范围类型可以表达一种单一范围值中的多个元素值,并且可以清晰地表达诸如范围重叠等概念。例如,用于时间安排的时间和日期范围、价格范围、仪器的量程等方面,都可使用范围类型。

GBase 8c提供如下内建范围类型:
 

 

l int4range — integer的范围

l int8range — bigint的范围

l numrange — numeric的范围

l tsrange — 不带时区的 timestamp的范围

l tstzrange — 带时区的 timestamp的范围

l daterange — date的范围

此外,用户也可以定义自己的范围类型,详见14.94 CREATE TYPE。

示例

gbase=# CREATE TABLE reservation (room int, during tsrange);

CREATE TABLE

gbase=# INSERT INTO reservation VALUES (1108, '[2010-01-01 14:30, 2010-01-01 15:30)');

INSERT 0 1

-- 包含

gbase=# SELECT int4range(10, 20) @> 3;

f

-- 重叠

gbase=# SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);

t

-- 抽取上界

gbase=# SELECT upper(int8range(15, 25));

25

-- 计算交集

gbase=# SELECT int4range(10, 20) * int4range(15, 25);

[15,20)

-- 范围为空吗?

gbase=# SELECT isempty(numrange(1, 5));

f

评论

登录后才可以发表评论
用户头像
levvel发表于 3个月前
受益匪浅!