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]', '*');Замена только второго числа
MySQL 8.1
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);Перестановка частей даты
MySQL 8.1
SELECT REGEXP_REPLACE(
'2024-03-08',
'([0-9]{4})-([0-9]{2})-([0-9]{2})',
'$3.$2.$1'
);Только цифры телефона
MySQL 8.1
SELECT name,
REGEXP_REPLACE(phone_number, '[^0-9]', '') AS digits
FROM Users
LIMIT 5;Подробности
В replacement можно вставить часть совпадения из скобок: $1 — первая группа, $2 — вторая и так далее. pos должен быть от 1 до длины строки + 1: при 0 и при большем значении функция выдаёт ошибку.