REGEXP_INSTR
Возвращает позицию подстроки, которая соответствует регулярному выражению.
MySQL 8.4
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])- [ ]необязательная часть
- expr
- Строка, в которой выполняется поискVARCHAR
- pattern
- Регулярное выражениеVARCHAR
- pos
- Позиция, с которой начинается поиск, от 1 до длины строки, по умолчанию 1INTНеобязательный
- occurrence
- Номер совпадения, по умолчанию 1 — первоеINTНеобязательный
- return_option
- 0 — начало совпадения, 1 — позиция после него; по умолчанию 0INTНеобязательный01
- match_type
- Флаги сопоставления, можно сочетатьVARCHARНеобязательныйcimnu
Возвращаемое значение
Целое число — позиция, начиная с 1; 0, если совпадения нет; NULL, если expr или pattern равен NULL
Примеры
Позиция первого числа
MySQL 8.4
SELECT REGEXP_INSTR('sql-academy-2024', '[0-9]+');Начало и конец второго числа
MySQL 8.4
SELECT REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2) AS match_start,
REGEXP_INSTR('a1b22c333', '[0-9]+', 1, 2, 1) AS after_match;Адрес без почтового индекса
MySQL 8.4
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, чтобы взять текст после найденного фрагмента.