最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

PostgreSQL數(shù)組函數(shù)的使用

 更新時(shí)間:2026年06月03日 09:02:04   作者:逍遙運(yùn)德  
在PostgreSQL18 中,數(shù)組類(lèi)型提供了非常豐富的內(nèi)置函數(shù),可以極大地提升對(duì)數(shù)組數(shù)據(jù)的處理效率,以下為整理了 PostgreSQL 操作數(shù)組的常用函數(shù)

在 PostgreSQL 18 中,數(shù)組類(lèi)型提供了非常豐富的內(nèi)置函數(shù),可以極大地提升對(duì)數(shù)組數(shù)據(jù)的處理效率。以下為整理了 PostgreSQL 操作數(shù)組的常用函數(shù)全集及詳細(xì)講解:

?? 創(chuàng)建數(shù)組

在 PostgreSQL 中創(chuàng)建數(shù)組,通常分為在表中定義數(shù)組字段在查詢(xún)中直接構(gòu)造數(shù)組兩種情況。

以下是詳細(xì)的操作方法:

1. 在表中定義數(shù)組字段

在創(chuàng)建表時(shí),可以在任何標(biāo)準(zhǔn)的數(shù)據(jù)類(lèi)型(如 TEXT、INTEGER 等)后面加上方括號(hào) [] 來(lái)聲明該字段為數(shù)組。

  • 一維數(shù)組:使用 數(shù)據(jù)類(lèi)型[]
  • 多維數(shù)組:使用 數(shù)據(jù)類(lèi)型[][](實(shí)際上 PostgreSQL 不強(qiáng)制限制維度,但這樣寫(xiě)語(yǔ)義更清晰)
-- 創(chuàng)建一個(gè)包含一維和二維數(shù)組字段的表
CREATE TABLE users (
    id SERIAL PRIMARY KEY,
    name TEXT,
    tags TEXT[],           -- 定義一個(gè)文本類(lèi)型的一維數(shù)組
    scores INTEGER[],      -- 定義一個(gè)整數(shù)類(lèi)型的一維數(shù)組
    matrix INTEGER[][]     -- 定義一個(gè)整數(shù)類(lèi)型的二維數(shù)組
);

PostgreSQL 也支持符合 SQL 標(biāo)準(zhǔn)的 ARRAY 關(guān)鍵字語(yǔ)法,例如 tags TEXT ARRAY 或 scores INTEGER ARRAY

不過(guò)需要注意,PostgreSQL 目前不會(huì)強(qiáng)制限制數(shù)組的實(shí)際長(zhǎng)度或維度,聲明時(shí)指定的大?。ㄈ?``)僅起到文檔說(shuō)明的作用2。

2. 向數(shù)組字段插入數(shù)據(jù)

插入數(shù)組數(shù)據(jù)主要有兩種寫(xiě)法:使用花括號(hào) {} 或者使用 ARRAY 構(gòu)造器2。

-- 方式一:使用 ARRAY 構(gòu)造器(推薦,更直觀)
INSERT INTO users (name, tags, scores, matrix)
VALUES ('Alice', ARRAY['developer', 'gamer'], ARRAY, ARRAY[,]);


-- 方式二:使用花括號(hào)字面量(注意內(nèi)部字符串通常需要加雙引號(hào))
INSERT INTO users (name, tags, scores)
VALUES ('Bob', '{"teacher", "writer"}', '{75, 80, 85}');

3. 在查詢(xún)中直接創(chuàng)建/構(gòu)造數(shù)組

如果不需要將數(shù)組存入表中,只是想在 SQL 查詢(xún)過(guò)程中臨時(shí)創(chuàng)建一個(gè)數(shù)組,可以使用以下幾種方式:

使用 ARRAY[] 構(gòu)造器:sql

SELECT ARRAY;                -- 結(jié)果: {1,2,3}
SELECT ARRAY['a', 'b', 'c'];          -- 結(jié)果: {a,b,c}
SELECT ARRAY[, ];           -- 結(jié)果: {{1,2},{3,4}} (二維數(shù)組)

使用 string_to_array 函數(shù)(將字符串按分隔符轉(zhuǎn)為數(shù)組):sql

SELECT string_to_array('apple,banana,orange', ','); 

-- 結(jié)果: {apple,banana,orange}

使用 array_agg 聚合函數(shù)(將多行數(shù)據(jù)合并為一個(gè)數(shù)組):sql

-- 假設(shè)有一個(gè)包含分?jǐn)?shù)的表,將分?jǐn)?shù)聚合成數(shù)組
SELECT array_agg(score) FROM user_scores WHERE user_id = 1;

?? 補(bǔ)充小知識(shí)

數(shù)組下標(biāo)從 1 開(kāi)始:PostgreSQL 的數(shù)組索引默認(rèn)是從 1 開(kāi)始的,而不是 01。

  • 例如 SELECT tags FROM users; 會(huì)取出數(shù)組的第一個(gè)元素。

數(shù)組查詢(xún):可以使用 ANY 或包含操作符 @> 來(lái)查詢(xún)數(shù)組中是否包含某個(gè)元素。

  • 例如:SELECT * FROM users WHERE 'gamer' = ANY(tags);

?? 數(shù)組基本信息與維度函數(shù)

array_length(anyarray, int)
返回?cái)?shù)組在指定維度上的長(zhǎng)度。

SELECT array_length(ARRAY, 1);  
-- 返回 

array_lower(anyarray, int)
返回?cái)?shù)組在指定維度上的下界(最低索引)。

SELECT array_lower(ARRAY, 1);  
-- 返回 1

array_upper(anyarray, int)
返回?cái)?shù)組在指定維度上的上界(最高索引)。

SELECT array_upper(ARRAY, 1);  
-- 返回 

array_ndims(anyarray)
返回?cái)?shù)組的維數(shù)(例如一維數(shù)組返回1,二維數(shù)組返回2)。

1SELECT array_ndims(ARRAY[, ]);  

-- 返回 2

array_dims(anyarray)
返回?cái)?shù)組維數(shù)的文本表示(包含下標(biāo)范圍)。

SELECT array_dims(ARRAY[, ]);  

-- 返回 '[1:2][1:3]'

? 數(shù)組增刪與拼接函數(shù)

array_append(anyarray, anyelement)
向數(shù)組的末尾添加一個(gè)元素。

SELECT array_append(ARRAY, 3);  

-- 返回 {1,2,3}

array_prepend(anyelement, anyarray)
向數(shù)組的開(kāi)頭添加一個(gè)元素。

SELECT array_prepend(1, ARRAY);  

-- 返回 {1,2,3,4,5}

array_cat(anyarray, anyarray)
將兩個(gè)數(shù)組拼接成一個(gè)新數(shù)組。

SELECT array_cat(ARRAY1, ARRAY2); 

 -- 返回 {1,2,3,4,5,6}

array_remove(anyarray, anyelement)
從數(shù)組中刪除所有等于指定值的元素。

-- 例如從數(shù)組中刪除元素 3
SELECT array_remove(ARRAY, 3);  

-- 返回 {1,2,4}

?? 數(shù)組搜索與定位函數(shù)

array_position(anyarray, anyelement [, integer])
返回指定元素在數(shù)組中第一次出現(xiàn)的下標(biāo)(索引從1開(kāi)始)。第三個(gè)可選參數(shù)表示從哪個(gè)下標(biāo)開(kāi)始搜索。

SELECT array_position(ARRAY['sun','mon','tue'], 'mon');  
-- 返回 2

array_positions(anyarray, anyelement)
返回指定元素在數(shù)組中所有出現(xiàn)位置的下標(biāo)數(shù)組。

SELECT array_positions(ARRAY, 1);  
-- 返回 {1,4}

?? 數(shù)組轉(zhuǎn)換與聚合函數(shù)

unnest(anyarray)
將數(shù)組展開(kāi),返回一組行(Set of rows),常用于將數(shù)組數(shù)據(jù)轉(zhuǎn)換成多行記錄。

SELECT unnest(ARRAY);  

-- 返回三行,分別為 1, 2, 3

array_agg(expression)
聚合函數(shù),將多行查詢(xún)結(jié)果收集并合并成一個(gè)數(shù)組。

SELECT array_agg(id) FROM users;  

-- 將 users 表的所有 id 聚合成一個(gè)數(shù)組

array_to_string(anyarray, text [, text])
將數(shù)組元素用指定的分隔符拼接成一個(gè)字符串。第三個(gè)可選參數(shù)用于替代數(shù)組中的 NULL 值。

SELECT array_to_string(ARRAY, ', ');  

-- 返回 '1, 2, 3'

string_to_array(text, text [, text])
將字符串按照指定的分隔符拆分成一個(gè)數(shù)組。第三個(gè)可選參數(shù)用于指定哪些字符串被視為 NULL。

SELECT string_to_array('1,2,3', ','); 

 -- 返回 {1,2,3}

array_fill(anyelement, int[], [int[]])
使用提供的值和維度(以及可選的下界)創(chuàng)建一個(gè)新數(shù)組。

SELECT array_fill(7, ARRAY);  

-- 返回 {7,7,7}

array_sort(array1 )

對(duì)數(shù)組的第一維元素進(jìn)行升序排序。

-- 將數(shù)組元素按升序排列
SELECT array_sort(ARRAY1);

-- 結(jié)果: {1,1,3,4,5,9}

array__reverse(anyarray)

將數(shù)組中的元素順序完全反轉(zhuǎn)。

-- 將數(shù)組元素倒序排列
SELECT array_reverse(ARRAY);

-- 結(jié)果: {5,4,3,2,1}

? (二),數(shù)組操作符

在 PostgreSQL 中,除了豐富的數(shù)組函數(shù)外,數(shù)組操作符也是處理數(shù)組數(shù)據(jù)的核心工具。

?? 數(shù)組比較操作符

這些操作符用于對(duì)兩個(gè)數(shù)組進(jìn)行比較,它們會(huì)對(duì)數(shù)組內(nèi)容進(jìn)行逐個(gè)元素的對(duì)比。

 原生數(shù)組比較是嚴(yán)格匹配的,它不僅要求數(shù)組中的元素完全一致,還要求元素的順序數(shù)組的維度也必須完全相同。

順序敏感:如果兩個(gè)數(shù)組包含的元素相同,但順序不同,它們會(huì)被視為不相等。

類(lèi)型與維度敏感:即使通過(guò)類(lèi)型轉(zhuǎn)換讓元素值看起來(lái)一樣,如果底層類(lèi)型或維度不同,也可能影響比較結(jié)果(不過(guò)在標(biāo)準(zhǔn)的同類(lèi)型比較中,= 會(huì)進(jìn)行合理的類(lèi)型匹配)。

  • =:判斷兩個(gè)數(shù)組是否相等。
  • <> :判斷兩個(gè)數(shù)組是否不相等。
  • < :判斷左側(cè)數(shù)組是否小于右側(cè)數(shù)組。
  • > :判斷左側(cè)數(shù)組是否大于右側(cè)數(shù)組。
  • <=:判斷左側(cè)數(shù)組是否小于或等于右側(cè)數(shù)組。
  • >=:判斷左側(cè)數(shù)組是否大于或等于右側(cè)數(shù)組。

?? 提示:數(shù)組的排序比較(<, > 等)是基于 B-tree 比較函數(shù)逐個(gè)元素進(jìn)行的,直到遇到第一個(gè)不同的元素來(lái)決定大小。

由于原生的 = 操作符對(duì)順序敏感,可以通過(guò)先排序再比較的方式來(lái)實(shí)現(xiàn)。

?? 數(shù)組拼接操作符 (||)

|| 操作符非常靈活,既可以用于數(shù)組之間的拼接,也可以用于將單個(gè)元素與數(shù)組拼接。

數(shù)組與數(shù)組拼接:將兩個(gè)數(shù)組合并。

SELECT ARRAY || ARRAY;  

-- 返回 {1,2,3,4,5,6}

元素與數(shù)組拼接(前置) :將元素添加到數(shù)組的開(kāi)頭。

SELECT 3 || ARRAY;  

-- 返回 {3,4,5,6}

數(shù)組與元素拼接(后置) :將元素添加到數(shù)組的末尾。

SELECT ARRAY || 7;  

-- 返回 {4,5,6,7}

?? 數(shù)組包含與重疊操作符

這些操作符常用于復(fù)雜的條件過(guò)濾,判斷數(shù)組之間的包含關(guān)系或是否有共同元素。

  • @>包含。判斷左側(cè)數(shù)組是否包含右側(cè)數(shù)組(即右側(cè)數(shù)組的所有元素都在左側(cè)數(shù)組中出現(xiàn)過(guò))。
  • <@被包含于。判斷左側(cè)數(shù)組是否被右側(cè)數(shù)組包含(即左側(cè)數(shù)組的所有元素都在右側(cè)數(shù)組中出現(xiàn)過(guò))。
SELECT ARRAY1 <@ ARRAY2;  

-- 返回 true

&&重疊。判斷兩個(gè)數(shù)組是否有共同的元素(只要有一個(gè)元素相同即為 true)。sq

SELECT ARRAY1 && ARRAY2;  

-- 返回 true

?? 提示:在包含操作符(@> 和 <@)中,重復(fù)的元素值不做特殊處理。例如 ARRAY 和 ARRAY 會(huì)被認(rèn)為互相包含。

掌握這些操作符,配合上一輪提到的數(shù)組函數(shù),就能在 PostgreSQL 中游刃有余地處理各種復(fù)雜的數(shù)組業(yè)務(wù)邏輯了

到此這篇關(guān)于PostgreSQL數(shù)組函數(shù)的使用的文章就介紹到這了,更多相關(guān)PostgreSQL數(shù)組函數(shù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!?

相關(guān)文章

  • PostgreSQL 數(shù)據(jù)同步到ES 搭建操作

    PostgreSQL 數(shù)據(jù)同步到ES 搭建操作

    這篇文章主要介紹了PostgreSQL 數(shù)據(jù)同步到ES 搭建操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL數(shù)據(jù)庫(kù)的基本查詢(xún)操作

    PostgreSQL數(shù)據(jù)庫(kù)的基本查詢(xún)操作

    這篇文章采用詳細(xì)的代碼示例為大家介紹了PostgreSQL數(shù)據(jù)庫(kù)的基本查詢(xún)操作使用,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步早日升職加薪
    2022-04-04
  • 在CentOS/Ubuntu環(huán)境下搭建PostgreSQL主從復(fù)制

    在CentOS/Ubuntu環(huán)境下搭建PostgreSQL主從復(fù)制

    本文介紹了如何在CentOS/Ubuntu環(huán)境下搭建PostgreSQL主從復(fù)制,以實(shí)現(xiàn)高可用和數(shù)據(jù)備份,通過(guò)配置主從庫(kù)、備份與恢復(fù)等步驟,可以有效降低單點(diǎn)故障帶來(lái)的影響,提高系統(tǒng)的容災(zāi)能力,同時(shí),還提供了內(nèi)網(wǎng)穿透工具的使用方法,便于遠(yuǎn)程訪問(wèn)數(shù)據(jù)庫(kù)
    2026-04-04
  • Mac?OS上安裝PostgreSQL完整圖文教程

    Mac?OS上安裝PostgreSQL完整圖文教程

    這篇文章主要介紹了Mac?OS上安裝PostgreSQL的完整圖文教程,問(wèn)文中通過(guò)代碼詳細(xì)介紹了如何設(shè)置密碼、允許遠(yuǎn)程連接、常用命令、備份與恢復(fù)、卸載以及常見(jiàn)問(wèn)題解決方法,需要的朋友可以參考下
    2026-01-01
  • UAT環(huán)境PostgreSQL ON CONFLICT DO UPDATE報(bào)錯(cuò)問(wèn)題及解決

    UAT環(huán)境PostgreSQL ON CONFLICT DO UPDATE報(bào)錯(cuò)問(wèn)

    這篇文章主要介紹了UAT環(huán)境PostgreSQL ON CONFLICT DO UPDATE報(bào)錯(cuò)問(wèn)題及解決過(guò)程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2026-04-04
  • PostgreSQL如何選擇合適的數(shù)據(jù)類(lèi)型

    PostgreSQL如何選擇合適的數(shù)據(jù)類(lèi)型

    本文詳細(xì)介紹了PostgreSQL中各種數(shù)據(jù)類(lèi)型的特性、適用場(chǎng)景、潛在陷阱及最佳實(shí)踐,涵蓋了數(shù)值、字符、時(shí)間、布爾、枚舉、網(wǎng)絡(luò)、JSON、幾何、全文搜索、范圍、自定義類(lèi)型等核心類(lèi)別,并通過(guò)真實(shí)案例說(shuō)明了數(shù)據(jù)類(lèi)型選型的邏輯,感興趣的朋友跟隨小編一起看看吧
    2026-01-01
  • PostgreSql 導(dǎo)入導(dǎo)出sql文件格式的表數(shù)據(jù)實(shí)例

    PostgreSql 導(dǎo)入導(dǎo)出sql文件格式的表數(shù)據(jù)實(shí)例

    這篇文章主要介紹了PostgreSql 導(dǎo)入導(dǎo)出sql文件格式的表數(shù)據(jù)實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • PostgreSQL擴(kuò)展UUID-OSSP的使用方法

    PostgreSQL擴(kuò)展UUID-OSSP的使用方法

    UUID-OSSP是PostgreSQL提供的一個(gè)擴(kuò)展模塊,用于生成符合標(biāo)準(zhǔn)的 UUID,下面就來(lái)介紹一下PostgreSQL擴(kuò)展UUID-OSSP的使用方法,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-07-07
  • postgresql 實(shí)現(xiàn)replace into功能的代碼

    postgresql 實(shí)現(xiàn)replace into功能的代碼

    這篇文章主要介紹了postgresql 實(shí)現(xiàn)replace into功能的代碼,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01
  • Postgresql中xlog生成和清理邏輯操作

    Postgresql中xlog生成和清理邏輯操作

    這篇文章主要介紹了Postgresql中xlog生成和清理邏輯操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-01-01

最新評(píng)論

太和县| 拉萨市| 木兰县| 米林县| 平顺县| 聊城市| 裕民县| 高青县| 浦北县| 隆昌县| 新河县| 巴青县| 阳江市| 巫溪县| 南宁市| 宜春市| 连云港市| 大田县| 巧家县| 大埔县| 中超| 南投市| 宾川县| 衡南县| 绩溪县| 台中市| 清镇市| 齐齐哈尔市| 宜宾市| 孟州市| 台东县| 温州市| 定安县| 民和| 广德县| 阜康市| 吉首市| 凭祥市| 忻城县| 和顺县| 安溪县|