Последнее обновление
INSTR
Описание
Функция INSTR возвращает позицию первого вхождения подстроки в основной строке; отсчёт позиций начинается с 1. Это часто используемая функция поиска в строках, которая поддерживает точное сопоставление и учитывает регистр. Функция широко применяется при обработке текста, очистке данных и анализе строк.
Синтаксис
INSTR(<str>, <substr>)
Параметры
| Параметр | Описание |
|---|---|
<str> | Основная строка, в которой выполняется поиск. Тип: VARCHAR |
<substr> | Искомая подстрока. Тип: VARCHAR |
Возвращаемое значение
Возвращает значение типа INT, обозначающее позицию первого вхождения подстроки в основной строке.
Правила поиска:
- Возвращает индекс позиции, отсчитываемый с 1 (а не с 0)
- Если подстрока не найдена, возвращает 0
- Поиск учитывает регистр
- Поддерживает корректное определение позиций для многобайтовых символов UTF-8
- Предусмотрена особая обработка пустых строк
Особые случаи:
- Если любой из параметров равен NULL, возвращает NULL
- Если подстрока является пустой строкой, возвращает 1 (пустая строка «присутствует» в любой позиции)
- Если основная строка пуста, а подстрока нет, возвращает 0
- Поддерживает поиск подстрок, содержащих специальные знаки и символы
Примеры
- Простой поиск символа
SELECT INSTR('abc', 'b'), INSTR('abc', 'd');
+-------------------+-------------------+
| INSTR('abc', 'b') | INSTR('abc', 'd') |
+-------------------+-------------------+
| 2 | 0 |
+-------------------+-------------------+
- Поиск подстроки
SELECT INSTR('hello world', 'world'), INSTR('hello world', 'WORLD');
+------------------------------+------------------------------+
| INSTR('hello world', 'world') | INSTR('hello world', 'WORLD') |
+------------------------------+------------------------------+
| 7 | 0 |
+------------------------------+------------------------------+
- Обработка значений NULL
SELECT INSTR(NULL, 'test'), INSTR('test', NULL);
+---------------------+---------------------+
| INSTR(NULL, 'test') | INSTR('test', NULL) |
+---------------------+---------------------+
| NULL | NULL |
+---------------------+---------------------+
- Обработка пустых строк
SELECT INSTR('hello', ''), INSTR('', 'world');
+--------------------+---------------------+
| INSTR('hello', '') | INSTR('', 'world') |
+--------------------+---------------------+
| 1 | 0 |
+--------------------+---------------------+
- Повторные вхождения (возвращается первое совпадение)
SELECT INSTR('abcabc', 'abc'), INSTR('banana', 'a');
+------------------------+----------------------+
| INSTR('abcabc', 'abc') | INSTR('banana', 'a') |
+------------------------+----------------------+
| 1 | 2 |
+------------------------+----------------------+
- Специальные знаки и символы
SELECT INSTR('user@example.com', '@'), INSTR('price: $99.99', '$');
+--------------------------------+-----------------------------+
| INSTR('user@example.com', '@') | INSTR('price: $99.99', '$') |
+--------------------------------+-----------------------------+
| 5 | 8 |
+--------------------------------+-----------------------------+
- Многобайтовые символы UTF-8
SELECT INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai'), INSTR('ṭṛì ḍḍumai hello', 'hello');
+--------------------------------------------------+---------------------------------------------+
| INSTR('ṭṛì ḍḍumai hello', 'ḍḍumai') | INSTR('ṭṛì ḍḍumai hello', 'hello') |
+--------------------------------------------------+---------------------------------------------+
| 5 | 12 |
+--------------------------------------------------+---------------------------------------------+
- Строки с числами
SELECT INSTR('123456789', '456'), INSTR('123-456-789', '-');
+---------------------------+---------------------------+
| INSTR('123456789', '456') | INSTR('123-456-789', '-') |
+---------------------------+---------------------------+
| 4 | 4 |
+---------------------------+---------------------------+
- Поиск подстроки в тексте из нескольких слов
SELECT INSTR('The quick brown fox', 'quick'), INSTR('The quick brown fox', 'slow');
+---------------------------------------+--------------------------------------+
| INSTR('The quick brown fox', 'quick') | INSTR('The quick brown fox', 'slow') |
+---------------------------------------+--------------------------------------+
| 5 | 0 |
+---------------------------------------+--------------------------------------+
- Поиск в путях и URL
SELECT INSTR('/home/user/file.txt', '/'), INSTR('https://www.example.com', '://');
+-----------------------------------+-----------------------------------------+
| INSTR('/home/user/file.txt', '/') | INSTR('https://www.example.com', '://') |
+-----------------------------------+-----------------------------------------+
| 1 | 6 |
+-----------------------------------+-----------------------------------------+