常见数据类型的使用示例-范围类型
关键字:
范围类型、人大金仓、KingbaseES
范围类型介绍及Kingbase所包含的范围类型
范围类型是表达某种元素类型(称为范围的subtype)的一个值的范围的数据类型。例如, timestamp 的范围可以被用来表达一个会议室被保留的时间范围。在这种情况下,数据类型是 tsrange (“timestamp range”的简写)而 timestamp 是 subtype。subtype 必须具有一种总体的顺序。
KingbaseES 带有下列内建范围类型:
- int4range — integer 的范围
- int8range — bigint 的范围
- numrange — numeric 的范围
- tsrange — 不带时区的 timestamp 的范围
- tstzrange — 带时区的 timestamp 的范围
- daterange — date 的范围
- 此外,还可以自定义一个范围类型
范围类型边界值介绍
每一个非空范围都有两个界限,下界和上界。这些值之间的所有点都被包括在范围内。一个包含界限意味着边界点本身也被包括在范围内,而一个排除边界意味着边界点不被包括在范围内。
在一个范围的文本形式中,一个包含下界被表达为“ [ ”而一个排除下界被表达为“ ( ”。同样,一个包含上界被表达为“ ] ”而一个排除上界被表达为“ ) 。
一个范围值的输入必须遵循下列模式之一:
(lower-bound,upper-bound)
(lower-bound,upper-bound]
[lower-bound,upper-bound)
[lower-bound,upper-bound]
Empty
其中 lower-bound为下边界值,而upper-bound为上边界值
使用示例
- int4range类型
create table test_int4range(type_name varchar,type_range int4range);
INSERT INTO test_int4range VALUES ('int4range', '(10, 20)');
select * from test_int4range;
- int8range类型
create table int8range(type_name varchar,type_range int4range);
INSERT INTO int8range VALUES ('int8range', '(10, 20)');
select * from int8range;
- numrange类型
create table numrange (type_name varchar,type_range int4range);
INSERT INTO numrange VALUES ('numrange ', '(1, 14)');
select * from numrange ;
- tsrange类型
create table tsrange (type_name varchar,type_range tsrange );
INSERT INTO tsrange VALUES ('tsrange ', '[2010-01-01 14:30, 2010-01-01 15:30)');
select * from tsrange ;
- tstzrange
create table tstzrange (type_name varchar,type_range tstzrange );
INSERT INTO tstzrange VALUES ('tstzrange ', '(2010-01-01 14:30+8, 2010-01-01 15:30+8)');
select * from tstzrange ;
- daterange
create table daterange (type_name varchar,type_range daterange);
INSERT INTO daterange VALUES ('daterange', '[2010-01-01, 2010-01-05)');
select * from daterange;
- 自定义范围类型
CREATE TYPE floatrange AS RANGE (
subtype = float8,
subtype_diff = float8mi
);
create table test_floatrange (type_name varchar,type_range floatrange);
INSERT INTO test_floatrange VALUES ('floatrange ', '[1.234, 5.678]');
select * from test_floatrange;