Range & 复合类型

简介:


--pg支持范围类型
? int4range — Range of integer
? int8range — Range of bigint
? numrange — Range of numeric
? tsrange — Range of timestamp without time zone
? tstzrange — Range of timestamp with time zone
? daterange — Range of date






--范围时间戳
CREATE TABLE reservation (room int, during tsrange);
--插入范围内时间
INSERT INTO reservation VALUES
(1108, '[2010-01-01 14:30, 2010-01-01 15:30)');
 --正无空大,负无穷小 -infinity 代表无穷小
 INSERT INTO reservation VALUES
(1109, '[2010-01-01 14:30,"infinity" )'),(1110, '["-infinity",2010-01-01 14:30)');
postgres=# select * from reservation ;
 room |                    during                     
------+-----------------------------------------------
 1108 | ["2010-01-01 14:30:00","2010-01-01 15:30:00")
 1109 | ["2010-01-01 14:30:00",infinity)
 1110 | [-infinity,"2010-01-01 14:30:00")
 
 -- Containment 范围内是否包含某一个值
SELECT int4range(10, 20) @> 3;
-- Overlaps 两个范围是否有重叠
SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);

-- Extract the upper bound 求范围的上限
SELECT upper(int8range(15, 25));


-- Is the range empty? 判断范围是否为空
SELECT isempty(numrange(1, 5));

--每个范围类型都有一个与对应的构造函数,注意第三个参数说明其是全包围还是半包围
postgres=# SELECT int8range(1, 14, '(]');
 int8range 
-----------
 [2,15)
postgres=# SELECT numrange(NULL, 2.2);
 numrange 
----------
 (,2.2)

-- 类似购物卷包含在有效期
 postgres=# select '[2016-06-01,2016-07-01)'::daterange @> '[2016-06-18,2016-06-18]'::daterange;
 ?column? 
----------
 t
(1 row)
postgres=# select '[2016-06-01,2016-07-01)'::daterange @> '[2016-06-18,2016-07-18]'::daterange;
 ?column? 
----------
 f

--指定下限,但上限无穷
postgres=# select '[2016-06-01,)'::daterange @> '[2016-06-18,2016-07-18]'::daterange;
 ?column? 
----------
 t


-- Extract the upper bound 求范围的上限
postgres=# SELECT numrange(11.1, 22.2) && numrange(20.0, 30.0);
 ?column? 
----------
 t
(1 row)


-- Compute the intersection 求两个范围的交集
postgres=# SELECT int4range(10, 20) * int4range(15, 25);
 ?column? 
----------
 [15,20)
(1 row)

postgres=# SELECT int4range(10, 20) - int4range(15, 25); 
 ?column? 
----------
 [10,15)
(1 row)


postgres=# SELECT int4range(10, 20) + int4range(15, 25); 
 ?column? 
----------
 [10,25)
(1 row)

--创建索引
CREATE INDEX reservation_idx ON reservation USING GIST (during);







--pg支持复合类型,注意创建复合类型时 as 不能省略
CREATE TYPE inventory_item AS (
name text,
supplier_id integer,
price numeric
);

CREATE TABLE on_hand (
item inventory_item,
count integer
);
--注意此时的""和null是不一样的
insert into on_hand values('("rudy gao",11,12)' ,1),('("",11,12)' ,2),('(,11,12)' ,3);
insert into on_hand values(row("rudy gao",11,12)) ,4);
--选取name属性为null的值,注意小括号
postgres=# select * from on_hand where (item).name is null;
   item   | count 
----------+-------
 (,11,12) |     3
(1 row)
--选取name属性为空值,对于空值要去掉其中双引号
postgres=# select * from on_hand where (item).name = '""';
 item | count 
------+-------
(0 rows)
--选取name属性为空值
postgres=# select * from on_hand where (item).name = '';  
    item    | count 
------------+-------
 ("",11,12) |     2
 
 --更新复和类型数据值,注意set的左边不能加括号
 update on_hand set item.price=(item).price+1;

目录
相关文章
|
2月前
|
JavaScript 前端开发 开发者
set类型可以实现数组去重等
【10月更文挑战第30天】 `Set`类型在JavaScript中提供了一种方便、高效的集合数据结构,在数组去重、集合运算、数据存在性检查等方面都有广泛的应用,能够帮助开发者更简洁、高效地处理数据。
range() 函数
`range()`函数在Julia中生成指定范围和步长的序列。它可以有四个参数:`start`(起始值),`stop`(结束值),`length`(长度)和`step`(步长)。例如,`range(1, stop=100)`产生从1到100的序列。如果`length`未指定,序列会在接近`stop`但能被`step`整除的位置结束。`collect()`与`range()`结合使用可创建数组。示例展示了不同参数组合下的序列生成,并将其转换为数组。
|
8月前
都是取所有行的某列数据,这个array[:,2]和array[:,2:3]有什么不同呢
都是取所有行的某列数据,这个array[:,2]和array[:,2:3]有什么不同呢
|
8月前
|
存储 C++
共用体(Union)类型详解
共用体(Union)类型详解
218 0
|
分布式计算 大数据 Spark
有类型转换_split_ | 学习笔记
快速学习有类型转换_split_
118 0
有类型转换_split_ | 学习笔记
|
弹性计算 JavaScript 编译器
常见类型-2:数组和元组
本实验将介绍TypeScript中的数组和元组类型和用法
|
人工智能 索引 Python
|
C++ 容器
论c++中的数组,vector和array的区别及用法
论c++中的数组,vector和array的区别及用法
309 0
|
安全 Python
为什么range不是迭代器?range到底是什么类型?
迭代器是 23 种设计模式中最常用的一种(之一),在 Python 中随处可见它的身影,我们经常用到它,但是却不一定意识到它的存在。在关于迭代器的系列文章中(链接见文末),我至少提到了 23 种生成迭代器的方法。
1362 0
|
C# 网络架构 数据库
C#语法——元组类型
元组Tuple     我们现在使用的C#语法已经可以满足日常的开发需求,但C#语法还在进行版本的更新,在创造更多更优秀的语义来让我们使用。这里介绍一下C#5.0里的提供的语法——元组。   在C#中定义Tuple对象,转到定义查看,我们会看到如下代码 #region 程序集 mscorlib, Version=4.
1350 0