ARRAY_SLICE
ARRAY_SLICE
ARRAY_SLICE() 함수는 입력 배열의 지정된 요소 부분집합으로 구성된 배열을 반환해요.
본문
문법
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) |
|----------------------------------------|
| [] |
+----------------------------------------+