这篇文章给大家分享的是有关POSTGRESQL 新型字段类型怎么用的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。
成都创新互联秉承实现全网价值营销的理念,以专业定制企业官网,成都网站设计、成都网站建设,微信小程序开发,网页设计制作,手机网站制作设计,全网营销推广帮助传统企业实现“互联网+”转型升级专业定制企业官网,公司注重人才、技术和管理,汇聚了一批优秀的互联网技术人才,对客户都以感恩的心态奉献自己的专业和所长。
POSTGRESQL 在同种类型的数据库中,字段类型算是最丰富的,其中POSTGRESQL 里面有一种字段类型叫 RANGE,范围类型。这样的类型不曾在传统三大数据库中觅得踪影。
下面就说说,这样的新字段类型解决了什么问题?
金融中,都有类似合同之类的东西,合同一般都有起始日期和结束日期,一般就算提前还款的情况下,虽然可以提前结清,但原有的合同的初始设定的日期还是不能被随意修改的。
如果我们在传统数据库中,怎么操作,我们可能会建立两个字段,举例我们一个叫 START_TIME 另一个叫 END_TIME 来记录起始和结束的日期。
在数据库中这样解决逻辑问题,看似习以为常,但是其实深层次的去挖掘,这其实是在数据库中将一个整体进行了拆分。
那我们在POSTGRESQL 中怎么做呢?
下面不过多讲理论,直接切入主题
我们建立一个表,里面有一个类似其他数据库一样的自增列,并且有一个contract_no 合同号,还有一个不曾见面的 tsrange 类型。
这就是我们今天要提到的,时间范围类型。以下是所有测试数据
首先我们插入两条数据,在里面我们使用 tsrange的类型函数,
很明显,这是一个字段包含了两个时间的字段
那这有什么作用,例如我们要统计 我们现在的合同初始日期在 2019-01-01 以后生效的合同。
select * from contract where contract_start_end_time > tsrange('2019-01-01','2020-01-01');
很容易就能查出相关信息,当然这并不能体现这样的字段类型的优点
那我们继续
下面我想查一下,合同在 2019-01-30 日开始 到 2020-12-20 日结束的合同
select * from contract where contract_start_end_time > tsrange('2019-01-30','2020-12-20');
很明显,一下子就查出来了。
我们在创建针对这样的字段的索引
细心的人可能看见,这索引看起来很奇怪,当然这里面也有乾坤,也是其他三大数据库不具备的能力,此处略过。
我们在来难一点的查询,我们查一下包含,这也是传统在设计这方面需要用到的,我们需要查询 合同在 2019-02-01 ,并且 结束在 2021-02-03 和所有合同号
看这也是手拿把攥的。
可能还有人问,要是我查询不包含呢,哪怕初始日期,或者结束日期其中一个不再内也要查出来,当然这对 POSTGRESQL 也不是问题
select * from contract where contract_start_end_time <@ tsrange('2013-02-01','2021-02-03');
其实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 为什么在关系型数据库后面还要添加一个 OBJECT 数据库。
感谢各位的阅读!关于“POSTGRESQL 新型字段类型怎么用”这篇文章就分享到这里了,希望以上内容可以对大家有一定的帮助,让大家可以学到更多知识,如果觉得文章不错,可以把它分享出去让更多的人看到吧!