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

REGEXP_INSTR

Возвращает позицию подстроки, которая соответствует регулярному выражению.

MySQL 8.4
REGEXP_INSTR(expr, pattern[, pos[, occurrence[, return_option[, match_type]]]])
  • [ ]необязательная часть
expr
Строка, в которой выполняется поиск
VARCHAR
pattern
Регулярное выражение
VARCHAR
pos
Позиция, с которой начинается поиск, от 1 до длины строки, по умолчанию 1
INTНеобязательный
occurrence
Номер совпадения, по умолчанию 1 — первое
INTНеобязательный
return_option
0 — начало совпадения, 1 — позиция после него; по умолчанию 0
INTНеобязательный
01
match_type
Флаги сопоставления, можно сочетать
VARCHARНеобязательный
cimnu

Возвращаемое значение

Целое число — позиция, начиная с 1; 0, если совпадения нет; NULL, если expr или pattern равен NULL

Примеры

Позиция первого числа

MySQL 8.4
SELECT REGEXP_INSTR('sql-academy-2024', '[0-9]+');
REGEXP_INSTR('sql-academy-2024', '[0-9]+')
13

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

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

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

MySQL 8.4
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, чтобы взять текст после найденного фрагмента.

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