溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

POSTGRESQL 新型字段類(lèi)型怎么用

發(fā)布時(shí)間:2021-11-26 09:44:32 來(lái)源:億速云 閱讀:188 作者:小新 欄目:大數(shù)據(jù)

這篇文章給大家分享的是有關(guān)POSTGRESQL 新型字段類(lèi)型怎么用的內(nèi)容。小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,一起跟隨小編過(guò)來(lái)看看吧。

POSTGRESQL 在同種類(lèi)型的數(shù)據(jù)庫(kù)中,字段類(lèi)型算是最豐富的,其中POSTGRESQL 里面有一種字段類(lèi)型叫 RANGE,范圍類(lèi)型。這樣的類(lèi)型不曾在傳統(tǒng)三大數(shù)據(jù)庫(kù)中覓得蹤影。

下面就說(shuō)說(shuō),這樣的新字段類(lèi)型解決了什么問(wèn)題?

金融中,都有類(lèi)似合同之類(lèi)的東西,合同一般都有起始日期和結(jié)束日期,一般就算提前還款的情況下,雖然可以提前結(jié)清,但原有的合同的初始設(shè)定的日期還是不能被隨意修改的。

如果我們?cè)趥鹘y(tǒng)數(shù)據(jù)庫(kù)中,怎么操作,我們可能會(huì)建立兩個(gè)字段,舉例我們一個(gè)叫 START_TIME  另一個(gè)叫 END_TIME 來(lái)記錄起始和結(jié)束的日期。

在數(shù)據(jù)庫(kù)中這樣解決邏輯問(wèn)題,看似習(xí)以為常,但是其實(shí)深層次的去挖掘,這其實(shí)是在數(shù)據(jù)庫(kù)中將一個(gè)整體進(jìn)行了拆分。

那我們?cè)赑OSTGRESQL 中怎么做呢?

下面不過(guò)多講理論,直接切入主題

POSTGRESQL 新型字段類(lèi)型怎么用

我們建立一個(gè)表,里面有一個(gè)類(lèi)似其他數(shù)據(jù)庫(kù)一樣的自增列,并且有一個(gè)contract_no 合同號(hào),還有一個(gè)不曾見(jiàn)面的  tsrange 類(lèi)型。

這就是我們今天要提到的,時(shí)間范圍類(lèi)型。以下是所有測(cè)試數(shù)據(jù)

POSTGRESQL 新型字段類(lèi)型怎么用

首先我們插入兩條數(shù)據(jù),在里面我們使用 tsrange的類(lèi)型函數(shù),

POSTGRESQL 新型字段類(lèi)型怎么用

很明顯,這是一個(gè)字段包含了兩個(gè)時(shí)間的字段

POSTGRESQL 新型字段類(lèi)型怎么用

那這有什么作用,例如我們要統(tǒng)計(jì) 我們現(xiàn)在的合同初始日期在 2019-01-01 以后生效的合同。

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

POSTGRESQL 新型字段類(lèi)型怎么用

很容易就能查出相關(guān)信息,當(dāng)然這并不能體現(xiàn)這樣的字段類(lèi)型的優(yōu)點(diǎn)

POSTGRESQL 新型字段類(lèi)型怎么用

那我們繼續(xù)

下面我想查一下,合同在 2019-01-30 日開(kāi)始 到 2020-12-20 日結(jié)束的合同

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

POSTGRESQL 新型字段類(lèi)型怎么用

很明顯,一下子就查出來(lái)了。

我們?cè)趧?chuàng)建針對(duì)這樣的字段的索引

POSTGRESQL 新型字段類(lèi)型怎么用

細(xì)心的人可能看見(jiàn),這索引看起來(lái)很奇怪,當(dāng)然這里面也有乾坤,也是其他三大數(shù)據(jù)庫(kù)不具備的能力,此處略過(guò)。

我們?cè)趤?lái)難一點(diǎn)的查詢(xún),我們查一下包含,這也是傳統(tǒng)在設(shè)計(jì)這方面需要用到的,我們需要查詢(xún) 合同在 2019-02-01 ,并且 結(jié)束在 2021-02-03 和所有合同號(hào)

POSTGRESQL 新型字段類(lèi)型怎么用

看這也是手拿把攥的。

可能還有人問(wèn),要是我查詢(xún)不包含呢,哪怕初始日期,或者結(jié)束日期其中一個(gè)不再內(nèi)也要查出來(lái),當(dāng)然這對(duì) POSTGRESQL 也不是問(wèn)題

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

POSTGRESQL 新型字段類(lèi)型怎么用

其實(shí)POSTGRESQL 類(lèi)似這樣的功能還有很多,同時(shí)對(duì)于這樣的范圍字段還有一個(gè)注意的事情,就是 我們?cè)诓樵?xún)的時(shí)候 喜歡用 >=  =< 但對(duì)這樣的字段要小心,你要決定是 集合中的 () 【】, {】 【) 的那種。

看不懂的同學(xué),請(qǐng)補(bǔ)習(xí)一下 集合的概念

POSTGRESQL 新型字段類(lèi)型怎么用

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','(]'));

上面的雖然數(shù)據(jù)一致,但如果不注意設(shè)置的集合性質(zhì),那是要出問(wèn)題的,大家可以從下面的兩個(gè)圖中看結(jié)果,只是一個(gè) >=  和 > 的區(qū)別,給出的結(jié)果集是不一樣的,所以處理這樣的查詢(xún)要小心

POSTGRESQL 新型字段類(lèi)型怎么用

POSTGRESQL 新型字段類(lèi)型怎么用

最后有同學(xué)問(wèn),如果我不在后面添加集合的符合,那我默認(rèn)輸入的是什么樣的格式

()

對(duì),就是這樣的集合格式。

有時(shí)候從字段的類(lèi)型設(shè)計(jì),可以看出POSTGRESQL 為什么在關(guān)系型數(shù)據(jù)庫(kù)后面還要添加一個(gè) OBJECT 數(shù)據(jù)庫(kù)。

感謝各位的閱讀!關(guān)于“POSTGRESQL 新型字段類(lèi)型怎么用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,讓大家可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),可以把它分享出去讓更多的人看到吧!

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI