Range类型是 PostgreSQL中特有的数据类型,可以进行范围快速搜索。
1.内置Range类型
PostgreSQL中内置了一些常用的 Range类型,这些类型可以直接使用。
类型名称 | 类型作用 |
---|---|
int4range | 4字节整数的范围类型 |
int8range | 8字节大整数的范围类型 |
numrange | numeric的范围类型 |
daterange | 日期的范围类型 |
2.自定义Range类型
自定义Range类型的语法如下:
CREATE TYPE name AS RANGE (
subtype=subtype_name
[,subtype_opclass = subtype_operator_class]
[,collation = collation]
[,canonical = canonical_function]
[,subtype_diff = subtype_diff_function]
);
(1) subtype=subtype_name 指定子类型;
(2) subtype_opclass = subtype_operator_class 指定子类型的操作符;
(3) collation = collation指定排序规则;
(4) canonical = canonical_function 创建稀疏的Range类型;
(5) subtype_diff = subtype_diff_function 定义子类型的差别函数;
3.Range类型输入输出
括号()表示范围内不包含此元素,中括号[]表示范围内包括此元素。
3.1 int4range
稀疏的Range类型,内部存储格式为“[begin,end)”。 “empty”表示空,即范围内不包含任何元素。
select '[0,6]'::int4range;
select '(0,6)'::int4range;
select 'empty'::int4range;
3.2 numrange
连续类型的Range,内部是精确存储的。
select '[0,6]'::numrange;
select '(0,6)'::numrange;
3.3 极值
‘[1,)’表示从1到int4可以表示的最大数值。
select '[1,)'::int4range;
'[,1)' 表示从int4可以表示的最小数值到1。
select '[,1)'::int4range;
‘[1,)’表示从1到无穷大。
select '[1,)'::numrange;
'[,1)' 表示从负无穷到1。
select '[,1)'::numrange;