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

REGEXP_REPLACE

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

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

Параметры

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

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

Строка с заменёнными совпадениями; исходная строка, если совпадений нет; NULL, если expr, pattern или replacement равен NULL

Примеры

Замена всех цифр

MySQL 8.1
SELECT REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*');
REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*')
sql-academy-****

Замена только второго числа

MySQL 8.1
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);
REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2)
a1b*c333

Перестановка частей даты

MySQL 8.1
SELECT REGEXP_REPLACE(
		'2024-03-08',
		'([0-9]{4})-([0-9]{2})-([0-9]{2})',
		'$3.$2.$1'
	);
REGEXP_REPLACE('2024-03-08', '([0-9]{4})-([0-9]{2})-([0-9]{2})', '$3.$2.$1')
08.03.2024

Только цифры телефона

MySQL 8.1
SELECT name,
	REGEXP_REPLACE(phone_number, '[^0-9]', '') AS digits
FROM Users
LIMIT 5;
namedigits
Bruce Willis12025550128
George Clooney12025550145
Kevin Costner12025550197
Donald Sutherland12025550161
Jennifer Lopez12025550145

Подробности

В replacement можно вставить часть совпадения из скобок: $1 — первая группа, $2 — вторая и так далее. pos должен быть от 1 до длины строки + 1: при 0 и при большем значении функция выдаёт ошибку.

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