POSTGRESQL 新型字段类型怎么用

发布时间:2021-11-26 09:44:32 作者:小新
来源:亿速云 阅读:175

这篇文章给大家分享的是有关POSTGRESQL 新型字段类型怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。

POSTGRESQL 在同种类型的数据库中,字段类型算是最丰富的,其中POSTGRESQL 里面有一种字段类型叫 RANGE,范围类型。这样的类型不曾在传统三大数据库中觅得踪影。

下面就说说,这样的新字段类型解决了什么问题?

金融中,都有类似合同之类的东西,合同一般都有起始日期和结束日期,一般就算提前还款的情况下,虽然可以提前结清,但原有的合同的初始设定的日期还是不能被随意修改的。

如果我们在传统数据库中,怎么操作,我们可能会建立两个字段,举例我们一个叫 START_TIME  另一个叫 END_TIME 来记录起始和结束的日期。

在数据库中这样解决逻辑问题,看似习以为常,但是其实深层次的去挖掘,这其实是在数据库中将一个整体进行了拆分。

那我们在POSTGRESQL 中怎么做呢?

下面不过多讲理论,直接切入主题

POSTGRESQL 新型字段类型怎么用

我们建立一个表,里面有一个类似其他数据库一样的自增列,并且有一个contract_no 合同号,还有一个不曾见面的  tsrange 类型。

这就是我们今天要提到的,时间范围类型。以下是所有测试数据

POSTGRESQL 新型字段类型怎么用

首先我们插入两条数据,在里面我们使用 tsrange的类型函数,

POSTGRESQL 新型字段类型怎么用

很明显,这是一个字段包含了两个时间的字段

POSTGRESQL 新型字段类型怎么用

那这有什么作用,例如我们要统计 我们现在的合同初始日期在 2019-01-01 以后生效的合同。

select * from contract where contract_start_end_time > tsrange('2019-01-01','2020-01-01');

POSTGRESQL 新型字段类型怎么用

很容易就能查出相关信息,当然这并不能体现这样的字段类型的优点

POSTGRESQL 新型字段类型怎么用

那我们继续

下面我想查一下,合同在 2019-01-30 日开始 到 2020-12-20 日结束的合同

select * from contract where contract_start_end_time > tsrange('2019-01-30','2020-12-20');

POSTGRESQL 新型字段类型怎么用

很明显,一下子就查出来了。

我们在创建针对这样的字段的索引

POSTGRESQL 新型字段类型怎么用

细心的人可能看见,这索引看起来很奇怪,当然这里面也有乾坤,也是其他三大数据库不具备的能力,此处略过。

我们在来难一点的查询,我们查一下包含,这也是传统在设计这方面需要用到的,我们需要查询 合同在 2019-02-01 ,并且 结束在 2021-02-03 和所有合同号

POSTGRESQL 新型字段类型怎么用

看这也是手拿把攥的。

可能还有人问,要是我查询不包含呢,哪怕初始日期,或者结束日期其中一个不再内也要查出来,当然这对 POSTGRESQL 也不是问题

select * from contract where contract_start_end_time <@ tsrange('2013-02-01','2021-02-03');

POSTGRESQL 新型字段类型怎么用

其实POSTGRESQL 类似这样的功能还有很多,同时对于这样的范围字段还有一个注意的事情,就是 我们在查询的时候 喜欢用 >=  =< 但对这样的字段要小心,你要决定是 集合中的 () 【】, {】 【) 的那种。

看不懂的同学,请补习一下 集合的概念

POSTGRESQL 新型字段类型怎么用

postgresqlpostgres@[local]=#5432=;insert into contract (contract_no,contract_start_end_time) values ('20190130VB',tsrange('2019-01-2','2021-02-2','[]'));

INSERT 0 1

postgresqlpostgres@[local]=#5432=;insert into contract (contract_no,contract_start_end_time) values ('20190130VB',tsrange('2019-01-2','2021-02-2','()'));

INSERT 0 1

postgresqlpostgres@[local]=#5432=;insert into contract (contract_no,contract_start_end_time) values ('20190130VB',tsrange('2019-01-2','2021-02-2','[)'));

INSERT 0 1

postgresqlpostgres@[local]=#5432=;insert into contract (contract_no,contract_start_end_time) values ('20190130VB',tsrange('2019-01-2','2021-02-2','(]'));

上面的虽然数据一致,但如果不注意设置的集合性质,那是要出问题的,大家可以从下面的两个图中看结果,只是一个 >=  和 > 的区别,给出的结果集是不一样的,所以处理这样的查询要小心

POSTGRESQL 新型字段类型怎么用

POSTGRESQL 新型字段类型怎么用

最后有同学问,如果我不在后面添加集合的符合,那我默认输入的是什么样的格式

()

对,就是这样的集合格式。

有时候从字段的类型设计,可以看出POSTGRESQL 为什么在关系型数据库后面还要添加一个 OBJECT 数据库。

感谢各位的阅读!关于“POSTGRESQL 新型字段类型怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!

推荐阅读:
  1. PostgreSQL -- 数组类型操作
  2. PostgreSQL中copy有什么用

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

postgresql 大数据

上一篇:ajax异步请求服务器是怎样的

下一篇:C#如何实现基于Socket套接字的网络通信封装

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》