카테고리:

반정형 및 정형 데이터 함수 (배열/오브젝트)

ARRAY_SLICE

입력 배열 요소의 지정된 하위 세트에서 구성된 배열을 반환합니다.

구문

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

인자

array

결과 배열을 구성하기 위해 요소의 하위 세트가 사용되는 소스 배열입니다.

from

소스 배열의 위치입니다. 첫 번째 요소의 위치는 0 입니다. from 보다 적은 위치의 요소는 결과 배열에 포함되지 않습니다.

to

소스 배열의 위치입니다. to 과 같거나 큰 위치의 요소는 결과 배열에 포함되지 않습니다.

반환

반환된 값의 데이터 타입은 ARRAY 입니다.

사용법 노트

  • 출력에는 매개 변수 to 로 지정한 것까지의(해당 요소는 제외) 요소를 포함합니다.

  • 배열이 NULL이면 결과는 NULL입니다.

  • from 또는 to 가 NULL이면 결과는 NULL입니다.

  • from 또는 to 가 음수인 경우, 배열의 시작이 아니라 배열의 끝을 기준으로 합니다. 예를 들어 《-2》는 배열의 마지막에서 두 번째 위치를 나타냅니다.

  • fromto 가 둘 다 배열의 상한을 벗어나거나 둘 다 배열의 하한을 벗어나면 결과는 빈 세트입니다.

  • 정형 ARRAY 를 함수에 전달하면 함수는 동일한 유형의 정형 ARRAY를 반환합니다.

이러한 규칙(예: 음수를 배열 끝의 인덱스로 해석하고, 조각이 to 인덱스까지이되 해당 인덱스는 포함하지 않는다는 규칙)의 대부분은 Python과 같은 프로그래밍 언어의 배열 조각에 대한 규칙과 유사합니다.

이러한 각 규칙은 아래의 하나 이상의 예에 나와 있습니다.

이는 배열을 조각화하는 간단한 예를 보여줍니다.

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

출력:

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

이는 NULL을 입력 배열로 사용한 효과를 보여줍니다.

select array_slice(NULL, 2, 3);
Copy

출력:

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

이는 NULL을 조각 인덱스 중 하나로 사용한 효과를 보여줍니다:

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

출력:

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

이는 음수를 인덱스로 사용하는 효과를 보여줍니다. 숫자는 배열 끝에서 오프셋으로 해석됩니다.

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

출력:

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

두 인덱스 모두 음수일 수 있습니다. 즉, 둘 다 배열의 끝을 기준으로 할 수 있습니다.

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

출력:

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

이 예에서 두 인덱스는 모두 배열의 끝을 벗어납니다.

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

출력:

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

이 예에서 두 인덱스는 모두 배열의 시작 앞에 있습니다.

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

출력:

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

인덱스는 숫자여야 하지만, 배열의 요소는 숫자일 필요가 없습니다.

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

출력:

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