Справочник по функциям

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]+');
REGEXP_INSTR('sql-academy-2024', '[0-9]+')
13

Начало и конец второго числа

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;
match_startafter_match
46

Адрес без почтового индекса

MySQL 8.1
SELECT address,
	SUBSTRING(
		address,
		REGEXP_INSTR(address, '^[0-9-]+, ', 1, 1, 1)
	) AS without_zip
FROM Rooms
LIMIT 5;
addresswithout_zip
11218, Friel Place, New YorkFriel Place, New York
10018, 6th Avenue, New York6th Avenue, New York
10027, West 128th Street, New YorkWest 128th Street, New York
11238, Gates Avenue, New YorkGates Avenue, New York
10029, Park Avenue, New YorkPark Avenue, New York

Подробности

pos должен быть от 1 до длины строки: 0, отрицательное число или позиция за последним символом дают ошибку «Index out of bounds in regular expression search», а не 0.

С return_option = 1 функция возвращает позицию сразу после совпадения, и её можно сразу передать в SUBSTRING, чтобы взять текст после найденного фрагмента.

Смотрите также