支援的版本:目前 (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.54 顯示了陣列類型可用的特殊運算子。除了這些之外,表 9.1 中顯示的常用比較運算子也適用於陣列。比較運算子逐個元素比較陣列內容,使用元素資料類型的預設 B 樹比較函數,並根據第一個差異進行排序。在多維陣列中,元素以行優先順序訪問(最後一個下標變化最快)。如果兩個陣列的內容相同但維度不同,則維度資訊中的第一個差異決定排序順序。

表 9.54. 陣列運算子

運算子

描述

範例

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

連接兩個陣列。連接空陣列或空陣列是一個空操作;否則陣列必須具有相同的維度數(如第一個範例所示),或者維度數相差一(如第二個範例所示)。如果陣列不是相同的元素類型,它們將被強制轉換為一個通用類型(請參閱 第 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.55 顯示了可用於陣列類型的函數。 有關使用這些函數的更多資訊和範例,請參閱 第 8.15 節

表 9.55. 陣列函數

函數

描述

範例

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_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_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

另請參閱第 9.21 節,關於與陣列一起使用的彙總函式 array_agg

提交更正

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