본문으로 건너뛰기
최종 수정: 에

INTERVAL

설명​

INTERVAL 함수는 이진 탐색을 사용하여 N보다 큰 첫 번째 임계값의 인덱스를 반환합니다. 이 함수에서 이진 탐색 알고리즘을 올바르게 사용하고 최적의 성능을 얻으려면 임계값 매개변수가 오름차순(N1 ≤ N2 ≤ N3 ≤ ... ≤ Nn)으로 정렬되어 있어야 합니다.

  • 모든 매개변수는 정수로 처리됩니다.
  • 시간 복잡도가 O(log n)인 이진 탐색 알고리즘을 사용하므로 성능이 뛰어납니다.

이 함수는 MySQL의 interval 함수와 동일하게 동작합니다.

구문​

INTERVAL(N, N1, N2, N3, ...)

매개변수​

매개변수설명
N검색할 값으로, 정수 타입입니다.
N1, N2, N3, ...정수 타입의 임계값 목록으로, 오름차순(N1 ≤ N2 ≤ N3 ≤ ... ≤ Nn)으로 정렬되어 있어야 합니다. 임계값 매개변수가 하나 이상 필요합니다.

반환 값​

N보다 큰 첫 번째 임계값의 인덱스(0부터 시작)를 반환합니다. 반환 타입은 정수입니다.

N이 NULL이면 -1을 반환합니다.

임계값 매개변수(N1, N2, ...)가 NULL이면 0으로 처리됩니다.

예제​

-- Basic usage
SELECT INTERVAL(23, 1, 15, 17, 30, 44, 200);
+-----------------------------------------+
| INTERVAL(23, 1, 15, 17, 30, 44, 200) |
+-----------------------------------------+
| 3 |
+-----------------------------------------+

SELECT INTERVAL(10, 1, 10, 100, 1000);
+-----------------------------------+
| INTERVAL(10, 1, 10, 100, 1000) |
+-----------------------------------+
| 2 |
+-----------------------------------+

-- Boundary case: less than the first threshold
SELECT INTERVAL(0, 1, 10, 100);
+--------------------------+
| INTERVAL(0, 1, 10, 100) |
+--------------------------+
| 0 |
+--------------------------+

-- Boundary case: greater than all thresholds
SELECT INTERVAL(200, 1, 10, 100);
+----------------------------+
| INTERVAL(200, 1, 10, 100) |
+----------------------------+
| 3 |
+----------------------------+

-- Boundary case: equal to a threshold
SELECT INTERVAL(33, 1, 10, 32, 33, 102, 200);
+-------------------------------------------+
| INTERVAL(33, 1, 10, 32, 33, 102, 200) |
+-------------------------------------------+
| 4 |
+-------------------------------------------+

-- First parameter is NULL
SELECT INTERVAL(NULL, 1, 10, 100);
+----------------------------+
| INTERVAL(NULL, 1, 10, 100) |
+----------------------------+
| -1 |
+----------------------------+

-- Subsequent parameters are NULL, treated as 0
SELECT INTERVAL(3, -1, NULL, 2, 3, 4);
+--------------------------------+
| INTERVAL(3, -1, NULL, 2, 3, 4) |
+--------------------------------+
| 4 |
+--------------------------------+

-- NULL values causing unsorted sequence, resulting in incorrect binary search result
SELECT INTERVAL(20, 7, NULL, 14, NULL, 25, NULL, 50);
+-----------------------------------------------+
| INTERVAL(20, 7, NULL, 14, NULL, 25, NULL, 50) |
+-----------------------------------------------+
| 6 |
+-----------------------------------------------+

-- Input single parameter, error
SELECT INTERVAL(33);
ERROR 1105 (HY000): errCode = 2, detailMessage = Can not find the compatibility function signature: interval(TINYINT)