配列関数と演算子

PostgreSQL 9.1.1文書
前のページ | 巻戻し | 第 9章関数と演算子 | 早送り | 次のページ

# 9.17. 配列関数と演算子

表9-40に、配列型で使用可能な演算子を示します。

表 9-40. 配列演算子

演算子 | 説明 | 例 | 結果
--- | --- | --- | ---
`=` | 等しい | `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.14を参照してください。

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

表 9-41. 配列関数

関数 | 戻り値型 | 説明 | 例 | 結果
--- | --- | --- | --- | ---
``array_append`(`anyarray`, `anyelement`)` | `anyarray` | 配列の末尾に要素を追加 | `array_append(ARRAY[1,2], 3)` | `{1,2,3}`
``array_cat`(`anyarray`, `anyarray`)` | `anyarray` | ２つの配列を連結 | `array_cat(ARRAY[1,2,3], ARRAY[4,5])` | `{1,2,3,4,5}`
``array_ndims`(`anyarray`)` | `int` | その配列の次数を返す | `array_ndims(ARRAY[[1,2,3], [4,5,6]])` | `2`
``array_dims`(`anyarray`)` | `text` | 配列の次数をテキスト表現で返す | `array_dims(ARRAY[[1,2,3], [4,5,6]])` | `[1:2][1:3]`
``array_fill`(`anyelement`, `int[]`, [, `int[]`])` | `anyarray` | 提供された値と次数で初期化された配列を返す。１以外の下限を持たせることもできます | `array_fill(7, ARRAY[3], ARRAY[2])` | `[2:4]={7,7,7}`
``array_length`(`anyarray`, `int`)` | `int` | 入力された配列次元の長さを返す | `array_length(array[1,2,3], 1)` | `3`
``array_lower`(`anyarray`, `int`)` | `int` | 配列次元の下限を返す | `array_lower('[0:2]={1,2,3}'::int[], 1)` | `0`
``array_prepend`(`anyelement`, `anyarray`)` | `anyarray` | 配列の先頭に要素を追加 | `array_prepend(1, ARRAY[2,3])` | `{1,2,3}`
``array_to_string`(`anyarray`, `text` [, `text`])` | `text` | 配列の要素を提供された区切り文字かオプショナルなNULL文字を使用して連結 | `array_to_string(ARRAY[1, 2, 3, NULL, 5], ',', '*')` | `1,2,3,*,5`
``array_upper`(`anyarray`, `int`)` | `int` | 入力された配列の次元の上限を返す | `array_upper(ARRAY[1,8,3,7], 1)` | `4`
``string_to_array`(`text`, `text` [, `text`])` | `text[]` | 提供された区切り文字、およびオプショナルなNULL文字を使用して、文字列を配列の要素に分割 | `string_to_array('xx~^~yy~^~zz', '~^~', 'yy')` | `{xx,NULL,zz}`
``unnest`(`anyarray`)` | `setof anyelement` | 配列を行集合に展開 | `unnest(ARRAY[1,2])` |
    1
    2
(2 rows)

`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からは入力文字列を個別の文字列で分割するようになりました。

配列を伴った集約関数の使用法は、項9.18も参照してください。

前のページ | ホーム | 次のページ
条件式 | 上に戻る | 集約関数