カテゴリ:

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

ARRAY_SLICE

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

構文

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

引数

array

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

from

ソース配列内の位置です。最初の要素の位置は 0 です。 from 以下の位置の要素は、結果の配列には含まれません。

to

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

戻り値

この関数は ARRAY型の値を返します。

入力 arrayfromto を含め、引数が NULL の場合は NULL を返します。

使用上の注意

  • 出力には、パラメーター to で指定された要素までが含まれますが その要素は含みません

  • from または to のいずれかが負の場合は、配列の先頭ではなく、配列の末尾を基準にします。たとえば、 -2 は配列の最後から2番目の位置を指します。

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

  • 関数に 構造化配列 を渡すと、関数は同じ型の構造化配列を返します。

これらのルールの多く(例: 負の数を配列の最後からのインデックスとして解釈することや、スライスは to インデックスまでで、インデックスは含まないというルール)は、Pythonなどのプログラミング言語における配列スライスのルールに似ていることに注意してください。

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

これらの例では、 ARRAY 定数 を使って配列を構築します。また、 ARRAY_CONSTRUCT 関数を使用して配列を構築することもできます。

この例では、単純な配列のスライスを示します。

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

この例では、 ARRAY_SIZE 関数と ARRAY_SLICE 関数を使用して、配列を最後のインデックスまでスライスします。

SELECT ARRAY_SLICE([0,1,2,3,4,5,6], 3, ARRAY_SIZE([0,1,2,3,4,5,6])) AS slice_to_last_index;
Copy
+---------------------+
| SLICE_TO_LAST_INDEX |
|---------------------|
| [                   |
|   3,                |
|   4,                |
|   5,                |
|   6                 |
| ]                   |
+---------------------+

インデックスは数値にする必要がありますが、配列の要素は数値にする必要はありません。

SELECT ARRAY_SLICE(['foo','snow','flake','bar'], 1, 3);
Copy
+-------------------------------------------------+
| ARRAY_SLICE(['FOO','SNOW','FLAKE','BAR'], 1, 3) |
|-------------------------------------------------|
| [                                               |
|   "snow",                                       |
|   "flake"                                       |
| ]                                               |
+-------------------------------------------------+

この例では、入力配列として NULL を使用した場合の効果を示しています。

SELECT ARRAY_SLICE(NULL, 2, 3);
Copy
+-------------------------+
| ARRAY_SLICE(NULL, 2, 3) |
|-------------------------|
| NULL                    |
+-------------------------+

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

SELECT ARRAY_SLICE([0,1,2,3,4,5,6], NULL, 2);
Copy
+---------------------------------------+
| ARRAY_SLICE([0,1,2,3,4,5,6], NULL, 2) |
|---------------------------------------|
| NULL                                  |
+---------------------------------------+

この例では、負の数をインデックスとして使用した場合の効果を示しています。この数値は、配列の最後からのオフセットとして解釈されます。

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

この例では、両方のインデックスが負になる可能性があることを示しています(つまり、両方とも配列の末尾に相対的)。

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

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

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

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

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