日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > 数据库 >内容正文

数据库

PostgreSQL 数组类型

發(fā)布時間:2023/12/31 数据库 24 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PostgreSQL 数组类型 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

PostgreSQL 支持表的字段使用定長或可變長度的一維或多維數(shù)組,數(shù)組的類型可以是任何數(shù)據(jù)庫內(nèi)建的類型、用戶自定義的類型、枚舉類型,

以及組合類型。但目前還不支持 domain 類型。

?

數(shù)組類型的定義就是通過在數(shù)組元素類型名后面附加中括號 [] 來實現(xiàn)的,中括號中可以給一個長度數(shù)字,也可以不給,

定義指定多維數(shù)組的維度也是沒有意義的,數(shù)組的維度是根據(jù)實際插入的數(shù)據(jù)來確定的,如下兩個語句意義是一樣的:

CREATE TABLE test1 (id int, col1 int[], col2 int[10], col3 text[][]);CREATE TABLE test2 (id int, col1 int[10], col2 int[], col3 text[]);

?

如何輸入數(shù)組值

可以使用 ARRAY 構(gòu)造器語法輸入數(shù)據(jù),一個數(shù)組構(gòu)造器是一個表達式,它從自身的成員上構(gòu)造一個數(shù)組值。

一個簡單的數(shù)組構(gòu)造器由關(guān)鍵字 ARRAY、[、一個或多個表示數(shù)組元素值的表達式(用逗號分隔)、] 組成

INSERT INTO test values(1, ARRAY['os', 'dba']);INSERT INTO test values(1, ARRAY['os"dba', '123"456']);INSERT INTO test values(1, ARRAY['os''dba', '123''456']);// 多維數(shù)組,在向多維數(shù)組插入值時,各個維度的元素個數(shù)必須相同,否則會報錯 INSERT INTO test values(1, ARRAY[['os', 'dba'],['dba', 'os']]);

?

訪問數(shù)組

默認情況下,數(shù)組的下標(biāo)是從 1 開始的,但也可以指定下標(biāo)的開始值,如下:

CREATE TABLE test02 (id int[]);INSERT INTO test02 values('[2:4] = {1, 2, 3}');SELECT id[2], id[3], id[4] FROM test02;

指定上下標(biāo)的格式為:

'[下標(biāo):上標(biāo)] = [元素值1,元素值2,元素值3,...]'

?

可以使用數(shù)組的切片,如下所示:

SELECT id, col[1:2] FROM test02;

?

數(shù)組的操作符

數(shù)組類型支持一些集合關(guān)系的操作符,如下所示:

@> 包含?

ARRAY[1, 2, 3] @>?ARRAY[1, 2]?

結(jié)果:t

ARRAY[1, 2, 3] @>?ARRAY[1, 4]?

結(jié)果:f

ARRAY[1, 2, 3] @>?ARRAY[2, 1]?

結(jié)果:t

ARRAY[[1, 2, 3]] @>?ARRAY[[1, 2], [2, 3]]?

結(jié)果:t

?

<@ 被包含于

ARRAY[1, 2] <@ ARRAY[1, 2, 3]?

結(jié)果:t

ARRAY[2, 1] <@ ARRAY[1, 2, 3]?

結(jié)果:t

ARRAY[1, 4] <@ ARRAY[1, 2, 3]?

結(jié)果:t

ARRAY[[1, 2], [2, 4]] <@ ARRAY[1, 2, 3]?

結(jié)果:f

?

&& 重疊,是否有共同元素

ARRAY[1, 2, 3] && ARRAY[3, 4]?

結(jié)果:t

ARRAY[[1, 2], [3, 4]] && ARRAY[4, 5]?

結(jié)果:t

ARRAY[1, 2] && ARRAY[3, 4]

?結(jié)果:f

?

做集合比較時,不管數(shù)組中的元素在哪一維,都可以把它們當(dāng)作集合中的一個元素,而與數(shù)組的維度沒有關(guān)系。

?

連接操作符 “||”

同維度的數(shù)組與數(shù)組連接

ARRAY[1, 2] || ARRAY[3, 4]??

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

ARRAY[1, 2] || ARRAY[2, 3]??

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

不同維度的數(shù)組與數(shù)組連接

ARRAY[1, 2] || ARRAY[[3, 4], [5, 6]]

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

元素與數(shù)組之間的連接

1 || ARRAY[2, 3]

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

ARRAY[2, 3] || 1

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

1 || ARRAY[[2, 3]]

結(jié)果:報錯

?

數(shù)組的函數(shù)

array_cat(anyarray, anyarray)

連接兩個數(shù)組,返回新數(shù)組

示例:array_cat(ARRAY[1, 2], ARRAY[3, 4])? ? ?結(jié)果:{1, 2, 3, 4}

? ? ? ? ?array_cat(ARRAY[[1, 2]], ARRAY[3, 4])? ?結(jié)果:{{1, 2}, {3, 4}}

? ? ? ? ?array_cat(ARRAY[[1, 2]], ARRAY[[3, 4]])? ?結(jié)果:{{1, 2}, {3, 4}}

?

array_ndims(anyarray)

返回數(shù)組的維度,返回值類型為 int

示例:array_ndims(ARRAY[1, 2, 3])? 結(jié)果:1

? ? ? ? ?array_ndims(ARRAY[[1, 2, 3]])? 結(jié)果:2?

? ? ? ? ?array_ndims(ARRAY[[1, 2, 3], [4, 5, 6]])? 結(jié)果:2

? ? ? ? ?array_ndims(ARRAY[[[1, 2, 3]]])? 結(jié)果:3

?

array_length(anyarray, int)

返回數(shù)組指定維度的長度,維度數(shù)是有由第二個參數(shù)指定的

示例:? array_length(ARRAY[1, 2, 4], 1)? 結(jié)果:3

? ? ? ? ? ?array_length(ARRAY[[1, 2], [3, 4], [5, 6]], 1)? 結(jié)果:3

? ? ? ? ? ?array_length(ARRAY[[1, 2], [3, 4], [5, 6]], 2)? 結(jié)果:2

?

array_lower(anyarray, int)

返回數(shù)組的下標(biāo)

?

array_upperer(anyarray, int)

返回數(shù)組的上標(biāo)

?

array_prepend(anyelement, anyarray)

在數(shù)組的開頭插入一個元素

示例: array_prepend(7, ARRAY[8, 9])? ?結(jié)果:{7, 8, 9}

?

array_remove(anyarray, anyelement)

移除數(shù)組中為指定值的元素,只支持一維數(shù)組

示例: array_remove(ARRAY[1, 2, 3], 2)? ? ? ? ? ? ?結(jié)果: {1, 3}

? ? ? ? ??array_remove(ARRAY[1, 2, 3, 2, 1, 2], 2)? ?結(jié)果: {1, 3. 1}

?

array_replace(anyarray, anyelement, anyelement)

把數(shù)組中等于指定值元素的值用另一個指定值替代

示例:? array_replace(ARRAY[1, 4, 3], 4, 2)? 結(jié)果:{1,2,3}

?

array_to_string(anyarray, text)

使用指定的分隔符(第二個參數(shù)) 將數(shù)組元素連接為字符串

示例:? array_to_string(ARRAY[1,2,3], ',')? 結(jié)果:'1,2,3'

?

string_to_array(text, text)

用指定的分隔符分隔的字符串轉(zhuǎn)成數(shù)組

示例:string_to_array('1,2,3', ',')? ?結(jié)果:{1, 2, 3}

?

unnest(anyarray)

把數(shù)組變成多行返回

?

array_agg(字段)

聚合函數(shù)

?

轉(zhuǎn)發(fā)請著名出處:https://www.cnblogs.com/ryanzheng/p/9610182.html

轉(zhuǎn)載于:https://www.cnblogs.com/ryanzheng/p/9610182.html

總結(jié)

以上是生活随笔為你收集整理的PostgreSQL 数组类型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。