REGEXP_INSTR
Возвращает позицию подстроки, которая соответствует регулярному выражению.
MySQL 8.1
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])Параметры
- exprVARCHAR
- Строка, в которой выполняется поиск
- patternVARCHAR
- Регулярное выражение
- posINTнеобязательный
- Позиция, с которой начинается поиск, от 1 до длины строки, по умолчанию 1
- occurrenceINTнеобязательный
- Номер совпадения, по умолчанию 1 — первое
- return_optionINTнеобязательный
- По умолчанию начало совпадения, при значении 1 — позиция сразу после него
- Значения:01
- match_typeVARCHARнеобязательный
- Флаги сопоставления, как у REGEXP_LIKE, например c — с учётом регистра
Возвращаемое значение
Целое число — позиция, начиная с 1; 0, если совпадения нет; NULL, если expr или pattern равен NULL
Примеры
Позиция первого числа
MySQL 8.1
SELECT REGEXP_INSTR('sql-academy-2024', '[0-9]+');Начало и конец второго числа
MySQL 8.1
SELECT REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2) AS match_start,
REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2, 1) AS after_match;Адрес без почтового индекса
MySQL 8.1
SELECT address,
SUBSTRING(
address,
REGEXP_INSTR(address, '^[0-9-]+, ', 1, 1, 1)
) AS without_zip
FROM Rooms
LIMIT 5;Подробности
pos должен быть от 1 до длины строки: 0, отрицательное число или позиция за последним символом дают ошибку «Index out of bounds in regular expression search», а не 0.
С return_option = 1 функция возвращает позицию сразу после совпадения, и её можно сразу передать в SUBSTRING, чтобы взять текст после найденного фрагмента.