久久精品人人爽,华人av在线,亚洲性视频网站,欧美专区一二三

PostgreSQL中的范圍類型特性實例介紹

142次閱讀
沒有評論

共計 2982 個字符,預計需要花費 8 分鐘才能閱讀完成。

這篇文章主要講解了“PostgreSQL 中的范圍類型特性實例介紹”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“PostgreSQL 中的范圍類型特性實例介紹”吧!

 PostgreSQL 9.2 的一項新特性就是范圍類型 range types,通過這個名字你可以輕松猜出該類型的用途,它可讓你為某列數據定義數值范圍。

這個簡單的特性可以讓我們不需要定義兩個字段來描述數值的開始值和結束值,一個最直觀的例子就是:
 

postgres# CREATE TABLE salary_grid (id int, position_name text, start_salary int, end_salary int);
CREATE TABLE
postgres# INSERT INTO salary_grid VALUES (1,  junior developper , 20000, 30000);
INSERT 0 1
postgres# INSERT INTO salary_grid VALUES (2,  senior developper , 28000, 35000);
INSERT 0 1
postgres# INSERT INTO salary_grid VALUES (3,  postgres developper , 50000, 70000);
INSERT 0 1

這個簡單的關系用于存儲一個給定的職位和待遇的范圍(你還需要確定工資的貨幣單位),重要的是你必須實現一些系統函數或者外部程序 API 來執行例如范圍的交叉或者聯合。

Postgres 9.2 允許你的應用直接在數據庫端實現范圍值,范圍類型包括:

  4 位整數范圍, int4range

  8 位整數范圍, int8range

  數值范圍, numrange

  無時區的時間戳范圍, tsrange

  帶時間戳的時間范圍, tstzrange

  日期范圍, daterange

你也可以定義自己的范圍類型,Postgre 官網文檔給出了 float 的示例:
 

postgres# CREATE TYPE floatrange AS RANGE (
postgres# subtype = float8,
postgres# subtype_diff = float8mi);

有了這樣一個功能,我們前面提到的工資表格例子就可以改為:
 

postgres=# create table salary_grid (id int, position_name text, salary_range int4range);
CREATE TABLE
postgres=# INSERT INTO salary_grid VALUES (1,  junior developper ,  [20000, 30000] 
INSERT 0 1
postgres=# INSERT INTO salary_grid VALUES (2,  senior developper ,  [28000, 35000] 
INSERT 0 1
postgres=# INSERT INTO salary_grid VALUES (3,  postgres developper ,  [50000, 70000] 
INSERT 0 1
postgres=# select * from salary_grid;
id | position_name | salary_range
----+---------------------+---------------
1 | junior developper | [20000,30001)
2 | senior developper | [28000,35001)
3 | postgres developper | [50000,70001)
(3 rows)

很重要的一點是,如果使用的是括號 (),元組數據的上界是排除在外的,而中括號[] 則上界包含其中。

數據庫本身也包含不同的用于處理范圍類型的函數。

你可直接獲取一個給定范圍的最低和最高值:
 

postgres=# SELECT upper(salary_range), lower(salary_range) FROM salary_grid;
upper | lower
-------+-------
30001 | 20000
35001 | 28000
70001 | 50000
(3 rows)

你可以檢查某個值是否包含在給定范圍內:
 

postgres=# SELECT salary_range @  4000 as check
postgres=# FROM salary_grid
postgres=# WHERE position_name =  junior developper 
check
-------
(1 row)

這里顯示 4000 并不包含在初級職位的待遇里 [20000,30000].

這里稍微復雜了一些,你還可以檢查兩個范圍之間的重疊的部分,這里的 salary_range 使用的是 int4,因此 int4range 函數可用于此操作:
 

postgres=# WITH junior_salary AS (
 SELECT salary_range as junior
 FROM salary_grid
 WHERE position_name =  junior developper ),
senior_salary AS (
 SELECT salary_range as senior
 FROM salary_grid
 WHERE position_name =  senior developper )
SELECT int4range(junior)   int4range(senior) as check
 FROM junior_salary, senior_salary;
check
-------
(1 row)

這里顯示的是初級和高級職位之間的工資重疊部分。

你還可以設定無上下限的范圍類型,或者是只有上限或者下限的范圍類型,讓我們來看一個非常現實的例子:
 

postgres# UPDATE salary_grid SET salary_range =  [50000,)  WHERE position_name =  postgres developper 
UPDATE 0 1
postgres=# SELECT salary_range @  60000000 as check
postgres-# FROM salary_grid WHERE position_name =  postgres developper 
check
-------
(1 row)

你可以使用 lower_inf 或者 upper_inf 來檢查范圍的無限值。

Postgres 還有其他一些內嵌的函數(如 isempty),這個可以直接從官方文檔中獲取詳細信息。

感謝各位的閱讀,以上就是“PostgreSQL 中的范圍類型特性實例介紹”的內容了,經過本文的學習后,相信大家對 PostgreSQL 中的范圍類型特性實例介紹這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!

正文完
 
丸趣
版權聲明:本站原創文章,由 丸趣 2023-07-28發表,共計2982字。
轉載說明:除特殊說明外本站除技術相關以外文章皆由網絡搜集發布,轉載請注明出處。
評論(沒有評論)
主站蜘蛛池模板: 清河县| 平山县| 庆安县| 贵港市| 交城县| 金乡县| 罗田县| 元氏县| 湘乡市| 云林县| 乐昌市| 平邑县| 威宁| 南丹县| 台南市| 松潘县| 五河县| 镇康县| 静乐县| 阳江市| 马公市| 松原市| 黄梅县| 项城市| 兴义市| 黎平县| 澜沧| 松潘县| 玉屏| 泸水县| 勐海县| 潞城市| 元朗区| 洛隆县| 偃师市| 建瓯市| 迁安市| 巨野县| 涿鹿县| 婺源县| 尚志市|