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

REGEXP_SUBSTR

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

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

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

Подстрока с совпадением; NULL, если совпадения нет или expr либо pattern равен NULL

Примеры

Дата из текста

MySQL 8.4
SELECT REGEXP_SUBSTR(
		'Order from 2024-03-08',
		'[0-9]{4}-[0-9]{2}-[0-9]{2}'
	);
REGEXP_SUBSTR('Order from 2024-03-08', '[0-9]{4}-[0-9]{2}-[0-9]{2}')
2024-03-08

Третье число в строке

MySQL 8.4
SELECT REGEXP_SUBSTR('a1b22c333', '[0-9]+', 1, 3);
REGEXP_SUBSTR('a1b22c333', '[0-9]+', 1, 3)
333

Улица из адреса

MySQL 8.4
SELECT address,
	REGEXP_SUBSTR(address, '[^, ][^,]*', 1, 2) AS street
FROM Rooms
LIMIT 5;
addressstreet
11218, Friel Place, New YorkFriel Place
10018, 6th Avenue, New York6th Avenue
10027, West 128th Street, New YorkWest 128th Street
11238, Gates Avenue, New YorkGates Avenue
10029, Park Avenue, New YorkPark Avenue

Подробности

Группы в скобках не возвращаются по отдельности, результат — всё совпадение целиком. Чтобы получить только часть совпадения, сузьте выражение или используйте REGEXP_REPLACE с $1. pos должен быть от 1 до длины строки + 1: при 0 и при большем значении функция выдаёт ошибку.

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