他のバージョンの文書 15 | 14 | 13 | 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 | 7.3 | 7.2

9.19. 配列関数と演算子

表 9.51に、配列型専用に利用可能な演算子を示します。 これらに加えて表 9.1で示す通常の比較演算子が配列で利用できます。 比較演算子は配列の内容をその要素のデータ型用のデフォルトのB-tree比較関数を要素単位で比較し、最初にどの要素に違いがあったかに基づいてソートします。 多次元配列では配列の要素は行優先順にアクセスされます。(最後の添字が最初に変化します。) 2つの配列の内容が同じで次元数が異なる場合は、どの次元で最初に違いがあったかによってソート順が決まります。 (これはPostgreSQLの8.2より前のバージョンでは異なります。古いバージョンでは、次元数や添字の範囲が異なっても、2つの配列の内容が同じなら、同じ配列であるとしていました。)

表9.51 配列演算子

演算子

説明

anyarray @> anyarrayboolean

最初の配列が2番目を含んでいるか?すなわち、2番目の配列の各要素は最初の配列のいくつかの要素と同じであるか? (重複は特に考慮されないので、ARRAY[1]ARRAY[1,1]はそれぞれがお互いに相手を含んでいると見なされます。)

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

anyarray <@ anyarrayboolean

最初の配列は2番目に含まれているか?

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

anyarray && anyarrayboolean

配列は重なり合っているか?すなわち、共通の要素を持っているか?

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

anyarray || anyarrayanyarray

2つの配列を結合します。 nullあるいは空の配列の結合は無処理です。そうでない場合は、配列は同じ次元数を持っていなければなりません。 (最初の例にあるように)。さもなければ次元数でひとつ違わなければなりません(2番目の例にあるように)。

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]]{{1,2,3},{4,5,6},{7,8,9}}

anyelement || anyarrayanyarray

配列(空か一次元の配列でなければなりません)の先頭に要素を結合します。

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

anyarray || anyelementanyarray

配列(空か一次元の配列でなければなりません)の最後に要素を結合します。

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


配列演算子の振舞いの詳細は8.15を参照してください。 どの演算子がインデックス付きの操作をサポートしているかのより詳細については11.2を参照してください。

表 9.52に配列型で使用可能な関数を示します。 これらの関数の情報と例については8.15を参照してください。

表9.52 配列関数

関数

説明

array_append ( anyarray, anyelement ) → anyarray

配列の最後に要素を追加します。(anyarray || anyelement演算子と同じです。)

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

array_cat ( anyarray, anyarray ) → anyarray

2つの配列を結合します。(anyarray || anyarray演算子と同じです。)

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

与えられた値のコピーで満たされた2番目の引数で指定した次元の長さを持つ配列を返します。 オプションの3番目の引数は各次元の下限値を与えます(デフォルトはすべて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

要求された配列の次元の長さを返します。

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

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 ( anyarray, anyelement [, integer ] ) → integer

2番目の引数が最初に配列に現れた添字を返します。存在しなければNULLを返します。 3番目の引数が与えられるとその添字から検索が始まります。 配列は一次元でなければなりません。 比較はIS NOT DISTINCT FROMの意味論で行われるので、NULLを検索することができます。

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

array_positions ( anyarray, anyelement ) → integer[]

2番目の引数が配列に現れるすべての添字を配列で返します。存在しなければNULLを返します。 3番目の引数が与えられるとその添字から検索が始まります。 配列は一次元でなければなりません。 比較はIS NOT DISTINCT FROMの意味論で行われるので、NULLを検索することができます。 配列がNULLのときのみNULLが返ります。 値が配列中に見つからなければ空の配列が返ります。

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

array_prepend ( anyelement, anyarray ) → anyarray

配列の先頭に要素を追加します。(anyelement || anyarray演算子と同じです。)

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

array_remove ( anyarray, anyelement ) → anyarray

与えられた値と等しい要素を配列から削除します。 配列は一次元でなければなりません。 比較はIS NOT DISTINCT FROMの意味論で行われるので、NULLを削除することができます。

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

array_replace ( anyarray, anyelement, anyelement ) → anyarray

2番目の引数と等しい要素を3番目の引数で置き換えます。

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

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

配列要素をテキスト表現に変換しdelimiter文字列で区切って結合します。 NULLでないnull_stringが与えられると、配列要素をその文字列で表現します。さもなければ無視されます。

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

string_to_array ( string text, delimiter text [, null_string text ] ) → text[]

stringdelimiterが現れるところで分割し、残りのデータをtext配列にします。 delimiterNULLなら、string中の文字は配列中の別個の要素になります。 delimiterが空文字列なら、stringは単一のフィールドとして扱われます。 null_stringが提供されてNULLでなければ、その文字列とマッチするフィールドはNULLのエントリーに変換されます。

string_to_array('xx~~yy~~zz', '~~', 'yy'){xx,NULL,zz}

unnest ( anyarray ) → setof anyelement

配列を行の集合に展開します。

unnest(ARRAY[1,2])

 1
 2

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


注記

string_to_arrayは、PostgreSQL9.1から、前のバージョンとは2つの異なる振る舞いするようになりました。 1つ目は、入力した文字列長が0の場合、NULLを返すのではなく空の(要素数が0の)配列を返すようになりました。 2つ目は区切り文字列がNULLの場合、以前はNULLを返していましたが9.1からは入力文字列を個別の文字に分割するようになりました。

配列を使用する集約関数array_aggについて、9.21も参照してください。