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

REGEXP_SUBSTR

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

MySQL 8.1
REGEXP_SUBSTR(expr, pattern[, pos[, occurrence[, match_type]]])

Параметры

exprVARCHAR
Строка, в которой выполняется поиск
patternVARCHAR
Регулярное выражение
posINTнеобязательный
Позиция, с которой начинается поиск, от 1 до длины строки + 1, по умолчанию 1
occurrenceINTнеобязательный
Номер совпадения, по умолчанию 1 — первое
match_typeVARCHARнеобязательный
Флаги сопоставления, как у REGEXP_LIKE, например c — с учётом регистра

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

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

Примеры

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

MySQL 8.1
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.1
SELECT REGEXP_SUBSTR('a1b22c333', '[0-9]+', 1, 3);
REGEXP_SUBSTR('a1b22c333', '[0-9]+', 1, 3)
333

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

MySQL 8.1
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 и при большем значении функция выдаёт ошибку.

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