REGEXP_REPLACE
Заменяет совпадения с регулярным выражением на другую строку.
MySQL 8.4
REGEXP_REPLACE(expr, pattern, replacement[, pos[, occurrence[, match_type]]])- [ ]необязательная часть
- expr
- Исходная строкаVARCHAR
- pattern
- Регулярное выражениеVARCHAR
- replacement
- Строка, которая подставляется вместо совпаденияVARCHAR
- pos
- Позиция, с которой начинается поиск, от 1 до длины строки + 1, по умолчанию 1INTНеобязательный
- occurrence
- Номер заменяемого совпадения, по умолчанию 0 — всеINTНеобязательный
- match_type
- Флаги сопоставления, можно сочетатьVARCHARНеобязательныйcimnu
Возвращаемое значение
Строка с заменёнными совпадениями; исходная строка, если совпадений нет; NULL, если expr, pattern или replacement равен NULL
Примеры
Замена всех цифр
MySQL 8.4
SELECT REGEXP_REPLACE('sql-academy-2024', '[0-9]', '*');Замена только второго числа
MySQL 8.4
SELECT REGEXP_REPLACE('a1b22c333', '[0-9]+', '*', 1, 2);Перестановка частей даты
MySQL 8.4
SELECT REGEXP_REPLACE(
'2024-03-08',
'([0-9]{4})-([0-9]{2})-([0-9]{2})',
'$3.$2.$1'
);Только цифры телефона
MySQL 8.4
SELECT name,
REGEXP_REPLACE(phone_number, '[^0-9]', '') AS digits
FROM Users
LIMIT 5;Подробности
В replacement можно вставить часть совпадения из скобок: $1 — первая группа, $2 — вторая и так далее. pos должен быть от 1 до длины строки + 1: при 0 и при большем значении функция выдаёт ошибку.