無料スクリプト配布のPHP.TO   PHPの実用的なtips PHPマニュアル MySQLマニュアル Apacheマニュアル PostgreSQLマニュアル マニュアル検索    

9.18. 配列関数と演算子

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

表 9-42. 配列演算子

演算子 説明 結果
= 等しい 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-43 に配列型で使用可能な関数を示します。これらの関数の情報と例については 項8.15 を参照してください。

表 9-43. 配列関数

関数 戻り値型 説明 結果
array_append ( anyarray , anyelement ) anyarray 配列の末尾に要素を追加 array_append(ARRAY[1,2], 3) {1,2,3}
array_cat ( anyarray , anyarray ) anyarray 2つの配列を連結 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 提供された値と次数で初期化された配列を返す。1以外の下限を持たせることもできます 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_remove ( anyarray , anyelement ) anyarray 配列から与えられた値と等しい全ての要素を削除(配列は一次元) array_remove(ARRAY[1,2,3,2], 2) {1,3}
array_replace ( anyarray , anyelement , anyelement ) anyarray 新規値で与えられた値と等しいそれぞれの要素を置換 array_replace(ARRAY[1,2,5,4], 5, 3) {1,2,3,4}
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 は、 PostgreSQL 9.1から、前のバージョンとは2つの異なる振る舞いするようになりました。 1つ目は、入力した文字列長が0の場合、NULLを返すのではなく空の(要素が0の)配列を返すようになりました。2つ目は区切り文字がNULLの場合、以前はNULLを返していましたが9.1からは入力文字列を個別の文字列で分割するようになりました。

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


powered by SEO.CUG.NET