2025年9月25日: PostgreSQL 18 釋出!
支援的版本:當前18)/ 17 / 16 / 15 / 14 / 13
開發版本:devel
不支援的版本:12 / 11 / 10 / 9.6 / 9.5 / 9.4 / 9.3 / 9.2 / 9.1 / 9.0 / 8.4 / 8.3 / 8.2 / 8.1 / 8.0 / 7.4

9.19. 陣列函式和運算子 #

表 9.56 顯示了陣列型別支援的特殊運算子。除這些運算子外,表 9.1 中顯示的常規比較運算子也可用於陣列。比較運算子會逐個元素地比較陣列內容,使用元素資料型別的預設 B-tree 比較函式,並根據第一個不同點進行排序。在多維陣列中,元素按行主序(最後一個下標變化最快)進行訪問。如果兩個陣列的內容相等但維度不同,則維度的第一個差異決定排序順序。

表 9.56. 陣列運算子

運算子

描述

示例

anyarray @> anyarrayboolean

第一個陣列是否包含第二個陣列,即第二個陣列中出現的每個元素是否等於第一個陣列中的某個元素?(重複項不被特殊處理,因此 ARRAY[1]ARRAY[1,1] 都被認為包含對方。)

ARRAY[1,4,3] @> ARRAY[3,1,3]t

anyarray <@ anyarrayboolean

第一個陣列是否被第二個陣列包含?

ARRAY[2,2,7] <@ ARRAY[1,7,4,2,6]t

anyarray && anyarrayboolean

陣列是否重疊,即是否有共同元素?

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

anycompatiblearray || anycompatiblearrayanycompatiblearray

連線兩個陣列。連線 NULL 或空陣列是無操作;否則,陣列必須具有相同的維度(如第一個示例所示),或者維度相差一(如第二個示例所示)。如果陣列不是相同的元素型別,它們將被強制轉換為通用型別(請參閱 第 10.5 節)。

ARRAY[1,2,3] || ARRAY[4,5,6,7]{1,2,3,4,5,6,7}

ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9.9]]{{1,2,3},{4,5,6},{7,8,9.9}}

anycompatible || anycompatiblearrayanycompatiblearray

將一個元素連線到陣列的開頭(陣列必須為空或為一維)。

3 || ARRAY[4,5,6]{3,4,5,6}

anycompatiblearray || anycompatibleanycompatiblearray

將一個元素連線到陣列的末尾(陣列必須為空或為一維)。

ARRAY[4,5,6] || 7{4,5,6,7}


有關陣列運算子行為的更多詳細資訊,請參閱 第 8.15 節。有關哪些運算子支援索引操作的更多詳細資訊,請參閱 第 11.2 節

表 9.57 顯示了可用於陣列型別的函式。有關這些函式的更多資訊和用法示例,請參閱 第 8.15 節

表 9.57. 陣列函式

函式

描述

示例

array_append ( anycompatiblearray, anycompatible ) → anycompatiblearray

將一個元素追加到陣列末尾(與 anycompatiblearray || anycompatible 運算子相同)。

array_append(ARRAY[1,2], 3){1,2,3}

array_cat ( anycompatiblearray, anycompatiblearray ) → anycompatiblearray

連線兩個陣列(與 anycompatiblearray || anycompatiblearray 運算子相同)。

array_cat(ARRAY[1,2,3], ARRAY[4,5]){1,2,3,4,5}

array_dims ( anyarray ) → text

返回陣列維度的文字表示。

array_dims(ARRAY[[1,2,3], [4,5,6]])[1:2][1:3]

array_fill ( anyelement, integer[] [, integer[] ] ) → anyarray

返回一個由給定值副本填充的陣列,其維度長度由第二個引數指定。可選的第三個引數為每個維度提供下界值(預設為所有 1)。

array_fill(11, ARRAY[2,3]){{11,11,11},{11,11,11}}

array_fill(7, ARRAY[3], ARRAY[2])[2:4]={7,7,7}

array_length ( anyarray, integer ) → integer

返回所請求陣列維度的長度。(對於空或缺失的陣列維度,返回 NULL 而不是 0。)

array_length(array[1,2,3], 1)3

array_length(array[]::int[], 1)NULL

array_length(array['text'], 2)NULL

array_lower ( anyarray, integer ) → integer

返回所請求陣列維度的下界。

array_lower('[0:2]={1,2,3}'::integer[], 1)0

array_ndims ( anyarray ) → integer

返回陣列的維度數。

array_ndims(ARRAY[[1,2,3], [4,5,6]])2

array_position ( anycompatiblearray, anycompatible [, integer ] ) → integer

返回第二個引數在陣列中第一次出現的下標,如果不存在則返回 NULL。如果提供了第三個引數,則從該下標開始搜尋。陣列必須是一維的。比較使用 IS NOT DISTINCT FROM 語義,因此可以搜尋 NULL

array_position(ARRAY['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'], 'mon')2

array_positions ( anycompatiblearray, anycompatible ) → integer[]

返回第一個引數中第二個引數所有出現位置的下標陣列。陣列必須是一維的。比較使用 IS NOT DISTINCT FROM 語義,因此可以搜尋 NULL。僅當陣列為 NULL 時才返回 NULL;如果陣列中未找到該值,則返回空陣列。

array_positions(ARRAY['A','A','B','A'], 'A'){1,2,4}

array_prepend ( anycompatible, anycompatiblearray ) → anycompatiblearray

將一個元素前置到陣列的開頭(與 anycompatible || anycompatiblearray 運算子相同)。

array_prepend(1, ARRAY[2,3]){1,2,3}

array_remove ( anycompatiblearray, anycompatible ) → anycompatiblearray

從陣列中刪除所有等於給定值的元素。陣列必須是一維的。比較使用 IS NOT DISTINCT FROM 語義,因此可以刪除 NULL

array_remove(ARRAY[1,2,3,2], 2){1,3}

array_replace ( anycompatiblearray, anycompatible, anycompatible ) → anycompatiblearray

將陣列中每個等於第二個引數的元素替換為第三個引數。

array_replace(ARRAY[1,2,5,4], 5, 3){1,2,3,4}

array_reverse ( anyarray ) → anyarray

反轉陣列的第一個維度。

array_reverse(ARRAY[[1,2],[3,4],[5,6]]){{5,6},{3,4},{1,2}}

array_sample ( array anyarray, n integer ) → anyarray

array 中隨機選擇 n 個項並返回一個數組。n 不能超過 array 第一個維度的長度。如果 array 是多維的,一個 是具有給定第一個下標的切片。

array_sample(ARRAY[1,2,3,4,5,6], 3){2,6,1}

array_sample(ARRAY[[1,2],[3,4],[5,6]], 2){{5,6},{1,2}}

array_shuffle ( anyarray ) → anyarray

隨機打亂陣列的第一個維度。

array_shuffle(ARRAY[[1,2],[3,4],[5,6]]){{5,6},{1,2},{3,4}}

array_sort ( array anyarray [, descending boolean [, nulls_first boolean ]] ) → anyarray

對陣列的第一個維度進行排序。排序順序由陣列元素型別的預設排序順序決定;但是,如果元素型別是可排序的,則可以透過在 array 引數中新增 COLLATE 子句來指定要使用的排序規則。

如果 descendingtrue,則按降序排序,否則按升序排序。如果省略,預設為升序。如果 nulls_firsttrue,則 NULL 值出現在非 NULL 值之前,否則 NULL 值出現在非 NULL 值之後。如果省略,nulls_first 的值將與 descending 的值相同。

array_sort(ARRAY[[2,4],[2,1],[6,5]]){{2,1},{2,4},{6,5}}

array_to_string ( array anyarray, delimiter text [, null_string text ] ) → text

將每個陣列元素轉換為其文字表示,並將它們連線起來,用 delimiter 字串分隔。如果給定了 null_string 且不為 NULL,則 NULL 陣列條目由該字串表示;否則,它們將被忽略。另請參閱 string_to_array

array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')1,2,3,*,5

array_upper ( anyarray, integer ) → integer

返回所請求陣列維度的上界。

array_upper(ARRAY[1,8,3,7], 1)4

cardinality ( anyarray ) → integer

返回陣列中的總元素數,如果陣列為空則返回 0。

cardinality(ARRAY[[1,2],[3,4]])4

trim_array ( array anyarray, n integer ) → anyarray

透過刪除最後 n 個元素來修剪陣列。如果陣列是多維的,則只修剪第一個維度。

trim_array(ARRAY[1,2,3,4,5,6], 2){1,2,3,4}

unnest ( anyarray ) → setof anyelement

將陣列展開為行集。陣列元素按儲存順序讀出。

unnest(ARRAY[1,2])

 1
 2

unnest(ARRAY[['foo','bar'],['baz','quux']])

 foo
 bar
 baz
 quux

unnest ( anyarray, anyarray [, ... ] ) → setof anyelement, anyelement [, ... ]

將多個數組(可能資料型別不同)展開為行集。如果陣列長度不全相同,則較短的陣列用 NULL 填充。此形式僅允許在查詢的 FROM 子句中使用;請參閱 第 7.2.1.4 節

select * from unnest(ARRAY[1,2], ARRAY['foo','bar','baz']) as x(a,b)

 a |  b
---+-----
 1 | foo
 2 | bar
   | baz

有關與陣列一起使用的聚合函式 array_agg,請參閱 第 9.21 節

提交更正

如果您在文件中發現任何不正確、與您在使用特定功能時的經驗不符或需要進一步澄清的內容,請使用 此表單 報告文件問題。