ARRAY_SLICE

ARRAY_SLICE

ARRAY_SLICE() 함수는 입력 배열의 지정된 요소 부분집합으로 구성된 배열을 반환해요.

출처: Snowflake SQL Reference

본문

문법

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

인자

array — 결과 배열을 만들기 위해 요소 부분집합이 사용되는 소스 배열이에요.

from — 소스 배열의 위치예요. 첫 번째 요소의 위치는 0이에요. from보다 작은 위치의 요소는 결과 배열에 포함되지 않아요.

to — 소스 배열의 위치예요. to보다 같거나 큰 위치의 요소는 결과 배열에 포함되지 않아요.

반환

이 함수는 ARRAY 타입의 값을 반환해요.

입력 배열, from, to를 포함해 어떤 인자라도 NULL이면 NULL을 반환해요.

사용 노트

  • 출력은 to 매개변수로 지정된 요소까지 포함하되, 그 요소는 포함하지 않아요.
  • from 또는 to가 음수면 배열의 시작이 아니라 끝을 기준으로 해요. 예를 들어 -2는 배열의 뒤에서 두 번째 위치를 가리켜요.
  • from과 to가 둘 다 배열의 상한을 넘거나, 둘 다 하한을 넘으면 결과는 빈 집합이에요.
  • 구조화 배열을 함수에 전달하면 함수는 같은 타입의 구조화 배열을 반환해요.
  • 이 규칙들 중 다수(예: 음수를 배열 끝에서의 인덱스로 해석하는 것, 슬라이스가 to 인덱스까지 포함하되 해당 인덱스는 포함하지 않는 규칙)는 Python 같은 프로그래밍 언어의 배열 슬라이스 규칙과 비슷해요.
  • 위 규칙 각각은 아래 예제 중 최소 하나로 설명돼요.

예제

이 예제들은 ARRAY 상수를 사용해 배열을 구성해요. 또는 ARRAY_CONSTRUCT 함수를 사용해 배열을 구성할 수도 있어요.

이 예제는 간단한 배열 슬라이스를 보여줘요:

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

이 예제는 ARRAY_SLICE 함수와 함께 ARRAY_SIZE 함수를 사용해 마지막 인덱스까지 배열을 슬라이스해요:

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;
+---------------------+
| SLICE_TO_LAST_INDEX |
|---------------------|
| [                   |
|   3,                |
|   4,                |
|   5,                |
|   6                 |
| ]                   |
+---------------------+

인덱스는 숫자여야 하지만 배열의 요소는 숫자일 필요는 없어요:

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

이 예제는 NULL을 입력 배열로 사용했을 때의 효과를 보여줘요:

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

이 예제는 슬라이스 인덱스 중 하나로 NULL을 사용했을 때의 효과를 보여줘요:

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

이 예제는 인덱스로 음수를 사용했을 때의 효과를 보여줘요. 그 숫자는 배열 끝에서부터의 오프셋으로 해석돼요:

SELECT ARRAY_SLICE([0,1,2,3,4,5,6], 0, -2);
+-------------------------------------+
| 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);
+--------------------------------------+
| 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);
+--------------------------------------+
| ARRAY_SLICE([0,1,2,3,4,5,6], 10, 12) |
|--------------------------------------|
| []                                   |
+--------------------------------------+

이 예제에서 두 인덱스 모두 배열의 시작 앞이에요:

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

더 알아보기 (Learn more)