カテゴリ:

半構造化データ関数 (配列/オブジェクト)

ARRAY_SLICE

入力配列の要素の指定されたサブセットから構築された配列を返します。

構文

ARRAY_SLICE( <array> , <from> , <to> )

引数

配列

結果の配列を構築するために要素のサブセットが使用されるソース配列です。

始まり

ソース配列内の位置です。最初の要素の位置は 0 です。 始まり 未満の位置の要素は、結果の配列に含まれません。

終わり

ソース配列内の位置です。 終わり 以上の位置の要素は、結果の配列に含まれません。

戻り値

返される値のデータ型は ARRAY です。

使用上の注意

  • 出力には、要素の最大値が含まれますが、パラメーター 終わり で指定された要素は 含まれません

  • 配列が NULLの場合、結果は NULLです。

  • 始まり または 終わり のいずれかが NULLの場合、結果は NULLです。

  • 始まり または 終わり のいずれかが負の場合、配列の先頭ではなく、配列の末尾になります。例:「-2」は配列内の最後から2番目の位置を指します。

  • 始まり終わり が両方とも配列の上限を超えているか、両方とも配列の下限を超えている場合、結果は空のセットになります。

これらの規則の多く(例:配列の最後からのインデックスとしての負の数の解釈、およびスライスが 終わり インデックスまでであるがそれを含まないというルール)は、Pythonなどのプログラミング言語での配列スライスのルールに似ています。

これらの各ルールは、以下の少なくとも1つの例に示されています。

これは、配列をスライスする簡単な例を示しています。

select array_slice(array_construct(0,1,2,3,4,5,6), 0, 2);

出力:

+---------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), 0, 2) |
|---------------------------------------------------|
| [                                                 |
|   0,                                              |
|   1                                               |
| ]                                                 |
+---------------------------------------------------+

これは、入力配列として NULL を使用した効果を示しています。

select array_slice(NULL, 2, 3);

出力:

+-------------------------+
| ARRAY_SLICE(NULL, 2, 3) |
|-------------------------|
| NULL                    |
+-------------------------+

これは、スライスインデックスの1つとして NULL を使用した効果を示しています。

select array_slice(array_construct(0,1,2,3,4,5,6), NULL, 2);

出力:

+------------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), NULL, 2) |
|------------------------------------------------------|
| NULL                                                 |
+------------------------------------------------------+

これは、インデックスとして負の数を使用する効果を示しています。数値は、配列の末尾からのオフセットとして解釈されます。

select array_slice(array_construct(0,1,2,3,4,5,6), 0, -2);

出力:

+----------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), 0, -2) |
|----------------------------------------------------|
| [                                                  |
|   0,                                               |
|   1,                                               |
|   2,                                               |
|   3,                                               |
|   4                                                |
| ]                                                  |
+----------------------------------------------------+

両方のインデックスが負になる可能性があります。つまり、両方が配列の末尾に関連する場合があります。

select array_slice(array_construct(0,1,2,3,4,5,6), -5, -3);

出力:

+-----------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), -5, -3) |
|-----------------------------------------------------|
| [                                                   |
|   2,                                                |
|   3                                                 |
| ]                                                   |
+-----------------------------------------------------+

この例では、両方のインデックスが配列の末尾を超えています。

select array_slice(array_construct(0,1,2,3,4,5,6), 10, 12);

出力:

+-----------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), 10, 12) |
|-----------------------------------------------------|
| []                                                  |
+-----------------------------------------------------+

この例では、両方のインデックスが配列の開始前です。

select array_slice(array_construct(0,1,2,3,4,5,6), -10, -12);

出力:

+-------------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT(0,1,2,3,4,5,6), -10, -12) |
|-------------------------------------------------------|
| []                                                    |
+-------------------------------------------------------+

インデックスは数値でなければなりませんが、配列の要素は数値である必要はありません。

SELECT ARRAY_SLICE(ARRAY_CONSTRUCT('foo','snow','flake','bar'), 1, 3);

出力:

+----------------------------------------------------------------+
| ARRAY_SLICE(ARRAY_CONSTRUCT('FOO','SNOW','FLAKE','BAR'), 1, 3) |
|----------------------------------------------------------------|
| [                                                              |
|   "snow",                                                      |
|   "flake"                                                      |
| ]                                                              |
+----------------------------------------------------------------+