Hologres は PostgreSQL と互換性があり、標準の PostgreSQL 構文をサポートしています。このトピックでは、Hologres がサポートする配列 (ARRAY) 関数とその利用シーンについて説明します。
関数 | 機能 |
列内の複数行のデータを集約して配列にします。 | |
配列の末尾に要素を追加します。 | |
2 つの配列を連結します。 | |
配列に指定された値が含まれているかどうかをチェックします。 | |
テキスト配列のディメンション数を取得します。 | |
配列から重複した要素を削除します。 | |
指定された配列要素を含まない配列を取得します。 | |
指定された配列ディメンションの長さを返します。 | |
指定された配列ディメンションの下限を返します。 | |
配列内のすべての要素の最大値を返します。このプロセスでは NULL 値はスキップされます。 | |
配列内のすべての要素の最小値を返します。 | |
配列のディメンション数を返します。 | |
1次元配列から指定された値と等しいすべての要素を削除します。 | |
1次元配列内の指定された要素の添字を返します。 | |
配列の先頭に要素を追加します。 | |
配列の要素をソートします。 | |
指定された区切り文字を使用して配列要素を連結します。NULL 値を表す文字列を指定できます。 | |
2 つの配列を新しい配列にマージし、重複した要素を削除します。 | |
指定された配列ディメンションの上限を返します。 | |
文字列を正規表現と照合し、一致した部分を結果配列で返します。 | |
正規表現で文字列を分割し、結果を配列に変換します。 | |
配列の各要素を個別の行に展開します。 |
制限事項
array_max、array_min、array_contains、array_except、array_distinct、および array_union 関数は定数クエリをサポートしていません。例:SELECT array_max(ARRAY[-2, NULL, -3, -12, -7]);。
配列関数
ARRAY_TO_STRING
説明:指定された区切り文字を使用して配列要素を連結します。配列内の NULL 値を表す文字列を指定できます。
array_to_string(anyarray, text[, text])パラメーターの説明
anyarray:連結したい要素を含む配列。
text (2 番目のパラメーター):区切り文字として使用する文字列。
text (3 番目のパラメーター、オプション):NULL 値を表すために使用される文字列。このパラメーターが指定されていない場合、NULL 値は無視されます。
戻り値の説明
TEXT 型の値を返します。
例
-- 結果は 1,2,3 です SELECT array_to_string(ARRAY[1, 2, 3], ',')
ARRAY_AGG
説明:列内の複数行のデータを集約して配列にします。
方法 1:
array_agg(anyelement)パラメーターの説明
anyelement:集約する列または式。
注意事項:
DECIMAL、DATE、TIMESTAMP、および TIMESTAMPTZ データ型は、Hologres V1.3 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
JSON、JSONB、TIMETZ、INTERVAL、INET、OID、UUID、および ARRAY 型はサポートされていません。
方法 2:
array_agg (expression[ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]パラメーターの説明
expression:集約する式。
order_by_clause (オプション):集約のソート順を指定する ORDER BY 句。
filter_clause (オプション):FILTER 句のフィルター条件。条件を満たす行のみが集約に含まれます。
注意事項:
FILTER句は Hologres V1.3 以降でのみサポートされています。説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
ARRAY 型の値を返します。
例
例 1 (
array_agg(anyelement))CREATE TABLE test_array_agg_int ( c1 int ); INSERT INTO test_array_agg_int VALUES (1), (2); SELECT array_agg (c1) FROM test_array_agg_int;次の結果が返されます。
array_agg ----------- {2,1} (1 row)例 2 (
FILTER):CREATE TABLE test_array_agg_int ( c1 int ); INSERT INTO test_array_agg_int VALUES (1), (2); SELECT array_agg (c1) filter (where c1 >1) FROM test_array_agg_int;次の結果が返されます。
array_agg ----------- {2} (1 row)
ARRAY_APPEND
説明:配列の末尾に要素を追加します。
array_append(anyarray, anyelement)パラメーターの説明
anyarray:ソース配列。
anyelement:配列の末尾に追加する要素。
戻り値の説明
ARRAY 型の値を返します。
例
-- 結果は {1,2,3} です SELECT array_append(ARRAY[1,2], 3);
ARRAY_CAT
説明:2 つの配列を連結します。
array_cat(anyarray,anyarray)パラメーターの説明
anyarray (1 番目のパラメーター):最初の配列。
anyarray (2 番目のパラメーター):2 番目の配列。
戻り値の説明
ARRAY 型の値を返します。
例
-- 結果は {1,2,3,4,5} です SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]);
ARRAY_NDIMS
説明:配列のディメンション数を返します。
array_ndims(anyarray)パラメーターの説明
anyarray:クエリ対象の配列。
戻り値の説明
INT 型の値を返します。
例
-- 結果は 2 です SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_DIMS
説明:テキスト配列型のディメンション数を取得します。
array_dims(anyarray)パラメーターの説明
anyarray:クエリ対象の配列。
戻り値の説明
TEXT 型の値を返します。
例
-- 結果は [1:2][1:3] です SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_LENGTH
説明:指定された配列ディメンションの長さを返します。
array_length(anyarray, int)パラメーターの説明
anyarray:クエリ対象の配列。
int:長さを取得したいディメンション。ディメンションは 1 から番号が付けられます。
戻り値の説明
INT 型の値を返します。
例
-- 結果は 3 です SELECT array_length(ARRAY[1,2,3], 1);
ARRAY_LOWER
説明:指定された配列ディメンションの下限を返します。
array_lower(anyarray, int)パラメーターの説明
anyarray:クエリ対象の配列。
int:下限を取得したいディメンション。ディメンションは 1 から番号が付けられます。
戻り値の説明
INT 型の値を返します。
例
-- 結果は 0 です SELECT array_lower('[0:2]={1,2,3}'::int[], 1);
ARRAY_POSITIONS
説明:1次元配列内の指定された要素の添字を返します。
array_positions(anyarray, anyelement)パラメーターの説明
anyarray:クエリ対象の1次元配列。
anyelement:添字を検索したい要素。
戻り値の説明
ARRAY 型の値を返します。
例
-- 結果は {1,2,4} です SELECT array_positions(ARRAY['A','A','B','A'], 'A');
ARRAY_PREPEND
説明:配列の先頭に要素を追加します。
array_prepend(anyelement, anyarray)パラメーターの説明
anyelement:配列の先頭に追加する要素。
anyarray:ソース配列。
戻り値の説明
ARRAY 型の値を返します。
例
-- 結果は {1,2,3} です SELECT array_prepend(1, ARRAY[2,3]);
ARRAY_REMOVE
説明:1次元配列から指定された値と等しいすべての要素を削除します。
array_remove(anyarray, anyelement)パラメーターの説明
anyarray:処理対象の1次元配列。
anyelement:配列から削除する値。この値と等しいすべての要素が削除されます。
戻り値の説明
ARRAY 型の値を返します。
例
-- 結果は {1,3} です SELECT array_remove(ARRAY[1,2,3,2], 2);
ARRAY_SORT
説明:配列の要素をソートします。
array_sort(anyarray)パラメーターの説明
anyarray:ソートする配列。
注意事項:
Hologres V1.1.46 以降では TEXT 配列をサポートしています。TEXT 配列はソートのために INT8 配列に変換され、ソートされた TEXT 配列が返されます。
Hologres V1.3.18 以降では INT4、INT8、FLOAT4、FLOAT8、および BOOLEAN 配列をサポートしています。TEXT 配列は辞書式順序でソートされます。
戻り値の説明
ARRAY 型の値を返します。
例
-- 結果は {1,1,2,3} です SELECT array_sort(ARRAY[1,3,2,1]);
ARRAY_UPPER
説明:指定された配列ディメンションの上限を返します。
array_upper(anyarray, int)パラメーターの説明
anyarray:クエリ対象の配列。
int:上限を取得したいディメンション。ディメンションは 1 から番号が付けられます。
戻り値の説明
INT 型の値を返します。
例
-- 結果は 4 です SELECT array_upper(ARRAY[1,8,3,7], 1);
UNNEST
説明:配列の各要素を個別の行に展開します。
unnest(anyarray)パラメーターの説明
anyarray:展開する配列。
戻り値の説明
TEXT 型の値を返します。
例
SELECT unnest(ARRAY[1,2]);次の結果が返されます。
unnest ------ 1 2 (2 rows)
ARRAY_MAX
説明:配列内のすべての要素の最大値を返します。計算中に NULL 値はスキップされます。
array_max(array)パラメーターの説明
array:計算対象の配列。計算中に NULL 値はスキップされます。
注意事項:
この関数は Hologres V1.3.19 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
INT 型の値を返します。
例
CREATE TABLE test_array_max_int ( c1 int[] ); INSERT INTO test_array_max_int VALUES (NULL), (ARRAY[-2, NULL, -3, -12, -7]); SELECT c1, array_max (c1) FROM test_array_max_int;次の結果が返されます。
c1 | array_max ------------------+----------- \N |\N {-2,0,-3,-12,-7} | 0 (2 rows)
ARRAY_MIN
説明:配列内のすべての要素の最小値を返します。
array_min(array)パラメーターの説明
array:計算対象の配列。
注意事項:
この関数は Hologres V1.3.19 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
INT 型の値を返します。
例
CREATE TABLE test_array_min_text ( c1 text[] ); INSERT INTO test_array_min_text VALUES (NULL), (ARRAY['hello', 'holo', 'blackhole', 'array']); SELECT c1, array_min (c1) FROM test_array_min_text;次の結果が返されます。
c1 | array_min ------------------------------+----------- \N |\N {hello,holo,blackhole,array} | array (2 rows)
ARRAY_CONTAINS
説明:配列に指定された値が含まれているかどうかをチェックします。
array_contains(array, target_value)パラメーターの説明
array:チェックする配列。
target_value:配列内でチェックするターゲット値。
注意事項:
この関数は Hologres V1.3.19 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
BOOLEAN 型の値を返します。配列に指定された値が含まれている場合、関数は
trueを返します。それ以外の場合はfalseを返します。例
CREATE TABLE test_array_contains_text ( c1 text[], c2 text ); INSERT INTO test_array_contains_text VALUES (ARRAY[NULL, 'cs', 'holo', 'sql', 'a', NULL, ''], 'holo') , (ARRAY['holo', 'array', 'FE', 'l', NULL, ''], 'function'); SELECT c1, c2, array_contains (c1, c2) FROM test_array_contains_text;次の結果が返されます。
c1 | c2 | array_contains --------------------------+----------+---------------- {holo,array,FE,l,"",""} | function | f {"",cs,holo,sql,a,"",""} | holo | t (2 rows)
ARRAY_EXCEPT
説明:指定された配列要素を含まない配列を返します。
array_except(array1, array2)パラメーターの説明
array1:ソース配列。
array2:array1 から除外する要素の配列。結果は、array1 には含まれるが array2 には含まれない要素の配列になります。
注意事項:
この関数は Hologres V1.3.19 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
ARRAY 型の値を返します。
例
CREATE TABLE test_array_except_text ( c1 text[], c2 text[] ); INSERT INTO test_array_except_text VALUES (ARRAY['o', 'y', 'l', 'l', NULL, ''], NULL), (ARRAY['holo', 'hello', 'hello', 'SQL', '', 'blackhole'], ARRAY['holo', 'SQL', NULL, 'kk']); SELECT c1, c2, array_except (c1, c2) FROM test_array_except_text;次の結果が返されます。
c1 | c2 | array_except -------------------------------------+------------------+------------------- {o,y,l,l,"",""} | | {o,l,y,""} {holo,hello,hello,SQL,"",blackhole} | {holo,SQL,"",kk} | {blackhole,hello} (2 rows)
ARRAY_DISTINCT
説明:配列から重複した要素を削除します。
array_distinct(array)パラメーターの説明
array:重複を削除する配列。
注意事項:
この関数は Hologres V1.3.19 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
ARRAY 型の値を返します。
例
CREATE TABLE test_array_distinct_text ( c1 text[] ); INSERT INTO test_array_distinct_text VALUES (ARRAY['holo', 'hello', 'holo', 'SQL', 'SQL']), (ARRAY[]::text[]); SELECT c1, array_distinct (c1) FROM test_array_distinct_text;次の結果が返されます。
c1 | array_distinct ---------------------------+------------------ {holo,hello,holo,SQL,SQL} | {SQL,hello,holo} {} | {NULL} (2 rows)
ARRAY_UNION
説明:2 つの配列を新しい配列にマージし、重複した要素を削除します。
array_union(array1, array2)パラメーターの説明
array1:最初の配列。
array2:2 番目の配列。2 つの配列がマージされた後、重複が削除されます。
注意事項:
この関数は Hologres V1.3.19 以降でのみサポートされています。
説明ご利用の Hologres インスタンスのバージョンが古い場合は、インスタンスをアップグレードするか、Hologres DingTalk グループに参加してフィードバックを提供してください。詳細については、「インスタンスのアップグレード」または「オンラインサポートの利用方法」をご参照ください。
戻り値の説明
ARRAY 型の値を返します。
例
CREATE TABLE test_array_union_int ( c1 int[], c2 int[] ); INSERT INTO test_array_union_int VALUES (NULL, ARRAY[2, -3, 2, 7]), (ARRAY[2, 7, -3, 2, 7], ARRAY[12, 9, 8, 7]); SELECT c1, c2, array_union (c1, c2) FROM test_array_union_int;次の結果が返されます。
c1 | c2 | array_union --------------+------------+----------------- \N | {2,-3,2,7} | {2,7,-3} {2,7,-3,2,7} | {12,9,8,7} | {9,2,7,8,12,-3} (2 rows)
REGEXP_MATCH
説明:文字列を正規表現と照合し、一致した部分を配列で返します。
REGEXP_MATCH(<str> TEXT, <pattern> TEXT)パラメーター
str:必須。照合する文字列。
pattern:必須。正規表現。
戻り値
ARRAY 型の値を返します。
例
SELECT regexp_match('foobarbequebaz', '(bar)(beque)');次の結果が返されます。
regexp_match ------------ {bar,beque}
REGEXP_SPLIT_TO_ARRAY
説明:文字列を正規表現を使用して分割し、結果を配列として返す文字列分割関数です。
REGEXP_SPLIT_TO_ARRAY(<str> TEXT, <pattern> TEXT)パラメーター
str:必須。分割する文字列。
pattern:必須。文字列の分割方法を定義する正規表現。正規表現内の特殊文字と構造は、文字列内の区切り文字の位置を識別します。
戻り値
ARRAY 型の値を返します。
例
CREATE TABLE interests_test ( name text, interests text ); INSERT INTO interests_test VALUES ('Zhang San', 'singing,dancing'), ('Li Si', 'soccer,running,drawing'), ('Wang Wu', 'flower arranging,calligraphy,playing piano,sleeping'); SELECT name, REGEXP_SPLIT_TO_ARRAY(interests, ',') FROM interests_test;次の結果が返されます。
name | regexp_split_to_array ---------+----------------------------------------------------------- Zhang San | {singing,dancing} Li Si | {soccer,running,drawing} Wang Wu | {"flower arranging",calligraphy,"playing piano",sleeping}
演算子
演算子 | 戻り値の型 | 説明 | 利用シーン | 結果 |
@> | BOOLEAN | 最初の配列が 2 番目の配列を含むかどうかをチェックします。 |
| t |
<@ | BOOLEAN | 最初の配列が 2 番目の配列に含まれているかどうかをチェックします。 |
| f |
&& | BOOLEAN | 2 つの配列に共通の要素があるかどうかをチェックします。 説明 Hologres V1.3.37 以降では、入力として配列列をサポートしています。 |
| t |
高階配列関数
Hologres V3.2 以降では、いくつかの高階配列関数をサポートしています。詳細については、「LAMBDA 式と関連関数」をご参照ください。