Hologres は PostgreSQL と互換性があり、データ開発に標準の PostgreSQL 構文を使用できます。このトピックでは、Hologres でサポートされている配列関数について説明し、例を示します。
関数 | 説明 |
列の複数の行のデータを配列に集約します。 | |
配列の末尾に要素を追加します。 | |
2 つの配列を連結します。 | |
配列に特定の値が含まれているかどうかを確認します。 | |
配列の次元のテキスト表現を返します。 | |
配列から重複する要素を削除します。 | |
特定の要素を含まない配列を返します。 | |
リクエストされた配列の次元の長さを返します。 | |
リクエストされた配列の次元の最小値を返します。 | |
配列のすべてのデータの中で最大値を返します。NULL 値は計算に使用されません。 | |
配列のすべてのデータの中で最小値を返します。 | |
配列の次元数を返します。 | |
特定の値と等しいすべての要素を配列から削除します。配列は 1 次元でなければなりません。 | |
配列内の特定の要素のインデックスを返します。配列は 1 次元でなければなりません。 | |
配列の先頭に要素を追加します。 | |
配列内の要素をソートします。 | |
特定のデリミタを使用して配列要素を連結します。配列に NULL 値が存在する場合は、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 値が存在する場合は、NULL 値の表現方法を指定できます。
array_to_string(anyarray, text[, text])戻り値
TEXT 型の値が返されます。
例
-- 結果: 1,2,3 SELECT array_to_string(ARRAY[1, 2, 3], ',')
ARRAY_AGG
列の複数の行のデータを配列に集約します。
方法 1
array_agg(anyelement)使用上の注意:
Hologres V1.3 以降のみが DECIMAL、DATE、TIMESTAMP、および TIMESTAMPTZ データ型をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
JSON、JSONB、TIMETZ、INTERVAL、INET、OID、UUID、および ARRAY データ型はサポートされていません。
方法 2
array_agg (expression[ order_by_clause ] ) [ FILTER ( WHERE filter_clause ) ]使用上の注意:
Hologres V1.3 以降のみが
FILTERをサポートしています。説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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)戻り値
ARRAY 型の値が返されます。
例
-- 結果: 1,2,3 SELECT array_append(ARRAY[1,2], 3);
ARRAY_CAT
2 つの配列を連結します。
array_cat(anyarray,anyarray)戻り値
ARRAY 型の値が返されます。
例
-- 結果: {1,2,3,4,5} SELECT array_cat(ARRAY[1,2,3], ARRAY[4,5]);
ARRAY_NDIMS
配列の次元数を返します。
array_ndims(anyarray)戻り値
INT 型の値が返されます。
例
-- 結果: 2 SELECT array_ndims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_DIMS
配列の次元のテキスト表現を返します。
array_dims(anyarray)戻り値
TEXT 型の値が返されます。
例
-- 結果: [1:2][1:3] SELECT array_dims(ARRAY[[1,2,3], [4,5,6]]);
ARRAY_LENGTH
リクエストされた配列の次元の長さを返します。
array_length(anyarray, int)戻り値
INT 型の値が返されます。
例
-- 結果: 3 SELECT array_length(ARRAY[1,2,3], 1);
ARRAY_LOWER
リクエストされた配列の次元の最小値を返します。
array_lower(anyarray, int)戻り値
INT 型の値が返されます。
例
-- 結果: 0 SELECT array_lower('[0:2]={1,2,3}'::int[], 1);
ARRAY_POSITIONS
配列内の特定の要素のインデックスを返します。配列は 1 次元でなければなりません。
array_positions(anyarray, anyelement)戻り値
ARRAY 型の値が返されます。
例
-- 結果: {1,2,4} SELECT array_positions(ARRAY['A','A','B','A'], 'A');
ARRAY_PREPEND
配列の先頭に要素を追加します。
array_prepend(anyelement, anyarray)戻り値
ARRAY 型の値が返されます。
例
-- 結果: 1,2,3 SELECT array_prepend(1, ARRAY[2,3]);
ARRAY_REMOVE
指定された値と等しいすべての要素を配列から削除します。配列は 1 次元でなければなりません。
array_remove(anyarray, anyelement)戻り値
ARRAY 型の値が返されます。
例
-- 結果: {1,3} SELECT array_remove(ARRAY[1,2,3,2], 2);
ARRAY_SORT
配列内の要素をソートします。
array_sort(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)戻り値
INT 型の値が返されます。
例
-- 結果: 4 SELECT array_upper(ARRAY[1,8,3,7], 1);
UNNEST
複数の行に表示される配列要素を返します。
unnest(anyarray)戻り値
TEXT 型の値が返されます。
例
SELECT unnest(ARRAY[1,2]);結果:
unnest ------ 1 2 (2 rows)
ARRAY_MAX
配列のすべてのデータの中で最大値を返します。NULL 値は計算に使用されません。
array_max(array)使用上の注意:
Hologres V1.3.19 以降のみがこの関数をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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)使用上の注意:
Hologres V1.3.19 以降のみがこの関数をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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)使用上の注意:
Hologres V1.3.19 以降のみがこの関数をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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)使用上の注意:
Hologres V1.3.19 以降のみがこの関数をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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)使用上の注意:
Hologres V1.3.19 以降のみがこの関数をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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)使用上の注意:
Hologres V1.3.19 以降のみがこの関数をサポートしています。
説明Hologres インスタンスが以前のバージョンである場合は、インスタンスをスペックアップするか、Hologres DingTalk グループに参加してサポートを受けてください。詳細については、「Hologres のオンラインサポートを受ける」をご参照ください。
戻り値
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, intrests text ); INSERT INTO interests_test VALUES ('Ava', 'singing, dancing'), ('Bob', 'playing football, running, painting'), ('Jack', 'arranging flowers, writing calligraphy, playing the piano, sleeping'); SELECT name, REGEXP_SPLIT_TO_ARRAY(intrests, ',') FROM interests_test;次の結果が返されます。
name | regexp_split_to_array ---------------------------- Ava | {singing, dancing} Bob | {playing football, running, painting} Jack | {arranging flowers, writing calligraphy, playing the piano, sleeping}
演算子
オペレーター | 戻り値の型 | 説明 | 例 | 結果 |
@> | BOOLEAN | 配列 A に配列 B が含まれているかどうかを確認します。 |
| t |
<@ | BOOLEAN | 配列 A が配列 B に含まれているかどうかを確認します。 |
| f |
&& | BOOLEAN | 2 つの配列に同じ要素があるかどうかを確認します。 説明 Hologres V1.3.37 以降では、ARRAY 型のデータを入力パラメータとして使用できます。 |
| t |
高階配列関数
V3.2 以降では、Hologres は高階配列関数をサポートしています。詳細については、「LAMBDA 式と関連関数」をご参照ください。