表9.47「配列演算子」に、配列型で使用可能な演算子を示します。
表9.47 配列演算子
演算子 | 説明 | 例 | 結果 |
---|---|---|---|
= | 等しい | ARRAY[1.1,2.1,3.1]::int[] = ARRAY[1,2,3] | t |
<> | 等しくない | ARRAY[1,2,3] <> ARRAY[1,2,4] | t |
< | 未満 | ARRAY[1,2,3] < ARRAY[1,2,4] | t |
> | より大きい | ARRAY[1,4,3] > ARRAY[1,2,4] | t |
<= | 以下 | ARRAY[1,2,3] <= ARRAY[1,2,3] | t |
>= | 以上 | ARRAY[1,4,3] >= ARRAY[1,4,3] | t |
@> | 包含する | ARRAY[1,4,3] @> ARRAY[3,1] | t |
<@ | ・・・により包含される | ARRAY[2,7] <@ ARRAY[1,7,4,2,6] | t |
&& | 重複する(共通要素を持つ) | ARRAY[1,4,3] && ARRAY[2,1] | t |
|| | 配列と配列を連結 | ARRAY[1,2,3] || ARRAY[4,5,6] | {1,2,3,4,5,6} |
|| | 配列と配列を連結 | ARRAY[1,2,3] || ARRAY[[4,5,6],[7,8,9]] | {{1,2,3},{4,5,6},{7,8,9}} |
|| | 要素と配列を連結 | 3 || ARRAY[4,5,6] | {3,4,5,6} |
|| | 配列と要素を連結 | ARRAY[4,5,6] || 7 | {4,5,6,7} |
配列比較では、配列要素ごとに、要素のデータ型のデフォルトのB-tree比較関数を使用して、その内容が比較されます。 多次元配列では、行番号を優先して取り出します(最後の添え字が最も速く変わる順序で比較します)。 2つの配列の内容が同じで次元数が異なる場合、どの次元で最初に違いがあったかによってソート順が決まります。 (これは8.2より前のPostgreSQLでは異なります。古いバージョンでは、次数や添え字範囲が異なっていたとしても、内容が同じであれば、2つの配列は同じものとしていました。)
配列演算子の振舞いの詳細は8.15. 配列を参照してください。 どの演算子がインデックス付きの操作をサポートしているかのより詳細については11.2. インデックスの種類を参照してください。
表9.48「配列関数」に配列型で使用可能な関数を示します。 これらの関数の情報と例については8.15. 配列を参照してください。
表9.48 配列関数
関数 | 戻り値型 | 説明 | 例 | 結果 |
---|---|---|---|---|
| anyarray | 配列の末尾に要素を追加 | array_append(ARRAY[1,2], 3) | {1,2,3} |
| anyarray | 2つの配列を連結 | array_cat(ARRAY[1,2,3], ARRAY[4,5]) | {1,2,3,4,5} |
| int | 配列の次元数を返す | array_ndims(ARRAY[[1,2,3], [4,5,6]]) | 2 |
| text | 配列の次元をテキスト表現で返す | array_dims(ARRAY[[1,2,3], [4,5,6]]) | [1:2][1:3] |
| anyarray | 提供された値と次元で初期化された配列を返す。オプションで1以外の添字の下限を指定する。 | array_fill(7, ARRAY[3], ARRAY[2]) | [2:4]={7,7,7} |
| int | 指定次数での配列の長さを返す | array_length(array[1,2,3], 1) | 3 |
| int | 指定次数での配列の添字の下限を返す | array_lower('[0:2]={1,2,3}'::int[], 1) | 0 |
| int | 配列を第3引数で指定された要素、省略時は最初の要素から調べて、第2引数が最初に現れる添字を返す(配列は1次元であること) | array_position(ARRAY['sun','mon','tue','wed','thu','fri','sat'], 'mon') | 2 |
| int[] | 第1引数の配列内で第2引数が現れるすべての添字からなる配列を返す(配列は1次元であること) | array_positions(ARRAY['A','A','B','A'], 'A') | {1,2,4} |
| anyarray | 配列の先頭に要素を追加 | array_prepend(1, ARRAY[2,3]) | {1,2,3} |
| anyarray | 配列から指定の値と等しい要素をすべて削除(配列は一次元であること) | array_remove(ARRAY[1,2,3,2], 2) | {1,3} |
| anyarray | 指定の値と等しい各要素を新しい値で置換 | array_replace(ARRAY[1,2,5,4], 5, 3) | {1,2,3,4} |
| text | 配列の要素を提供された区切り文字、およびオプションで指定するNULL文字列を使用して連結 | array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*') | 1,2,3,*,5 |
| int | 指定次数での配列の添字の上限を返す | array_upper(ARRAY[1,8,3,7], 1) | 4 |
| int | 配列の中の要素の総数を返す。配列が空であれば0 | cardinality(ARRAY[[1,2],[3,4]]) | 4 |
| text[] | 提供された区切り文字、およびオプションで指定するNULL文字列を使用して、文字列を配列の要素に分割 | string_to_array('xx~^~yy~^~zz', '~^~', 'yy') | {xx,NULL,zz} |
| setof anyelement | 配列を行集合に展開 | unnest(ARRAY[1,2]) | 1 2(2 rows) |
| setof anyelement, anyelement [, ...] | 複数の配列(型が異なっているかもしれない)を行の集合に展開。これはFROM句の中でのみ使用可能。7.2.1.4. テーブル関数を参照 | unnest(ARRAY[1,2],ARRAY['foo','bar','baz']) | 1 foo 2 bar NULL baz(3 rows) |
array_position
およびarray_positions
では、各配列要素は検索する値とIS NOT DISTINCT FROM
の意味を用いて比較されます。
array_position
で値が見つからない時はNULL
が返されます。
array_positions
でNULL
が返されるのは配列がNULL
のときだけで、配列内に値が見つからない時は、空の配列が返されます。
string_to_array
では、区切り文字列がNULLの場合、入力された文字列の各々の文字が別々の要素となった配列を返します。
区切り文字列が空文字列の場合、入力された文字列全体が一つの要素となる配列を返します。
それ以外の場合、入力された文字列が区切り文字列のある箇所で分割されます。
string_to_array
では、NULL文字列パラメータが省略、もしくはNULLの指定がされた場合、入力文字列中の部分文字列がNULLに置換されることはありません。
array_to_string
では、NULL文字列パラメータが省略、もしくはNULLの指定がされた場合、配列中のNULL要素はスキップされ、出力文字列に現れません。
string_to_array
は、PostgreSQL9.1から、前のバージョンとは2つの異なる振る舞いするようになりました。
1つ目は、入力した文字列長が0の場合、NULLを返すのではなく空の(要素数が0の)配列を返すようになりました。
2つ目は区切り文字列がNULLの場合、以前はNULLを返していましたが9.1からは入力文字列を個別の文字に分割するようになりました。
配列を使用する集約関数array_agg
について、9.20. 集約関数も参照してください。