Последнее обновление
INTERVAL
Описание
Функция INTERVAL с помощью бинарного поиска возвращает индекс первого порогового значения, строго превышающего N. Для корректной работы алгоритма бинарного поиска и достижения оптимальной производительности пороговые параметры должны быть отсортированы по возрастанию (N1 ≤ N2 ≤ N3 ≤ ... ≤ Nn).
- Все параметры рассматриваются как целые числа.
- Используется алгоритм бинарного поиска с временной сложностью O(log n), обеспечивающий высокую производительность.
Поведение этой функции соответствует поведению функции interval в MySQL.
Синтаксис
INTERVAL(N, N1, N2, N3, ...)
Параметры
| Параметр | Описание |
|---|---|
N | Искомое значение целочисленного типа. |
N1, N2, N3, ... | Список пороговых значений целочисленного типа, отсортированный по возрастанию (N1 ≤ N2 ≤ N3 ≤ ... ≤ Nn). Требуется хотя бы один пороговый параметр. |
Возвращаемое значение
Возвращает индекс (начиная с 0) первого порогового значения, строго превышающего N. Возвращаемое значение имеет целочисленный тип.
Возвращает -1, если N имеет значение NULL.
Если пороговые параметры (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)