SELECT phone,
REGEXP_REPLACE(phone, '\D', '', 'g') AS digits
FROM users
LIMIT 3;
Результат:
phone | digits +7 (999) 123-45-67 | 79991234567 8-800-555-35-35 | 88005553535
SELECT comment,
REGEXP_REPLACE(comment, '\s+', ' ', 'g') AS clean
FROM events
LIMIT 2;
Результат:
comment | clean хочу Pro | хочу Pro всё ясно | всё ясно
SELECT email,
REGEXP_REPLACE(email, '(.).+(@.+)', '\1***\2') AS masked
FROM users
LIMIT 3;
Результат:
email | masked anna@yandex.ru | a***@yandex.ru ivan@ozon.ru | i***@ozon.ruПорешать SQL-задачи в тренажёре →
Классическая задача на чистку и нормализацию строк на собесе — рядом идут TRIM, LOWER и обычный REPLACE для простых, не-regex случаев.
REPLACE ищет и меняет буквальную подстроку, без шаблонов. REGEXP_REPLACE работает по регулярному выражению, поэтому справляется с переменными паттернами (любые цифры, пробелы, группы). REGEXP мощнее, но медленнее, так что для простой замены фиксированного текста берут REPLACE.
В PostgreSQL по умолчанию REGEXP_REPLACE меняет только первое совпадение — чтобы заменить все, добавьте флаг 'g': REGEXP_REPLACE(col, pattern, repl, 'g'). В MySQL 8 наоборот, по умолчанию заменяются все вхождения.
В стандартной сборке SQLite встроенной REGEXP_REPLACE нет — нужна загружаемая функция/расширение или функция, определённая в приложении. Для простых замен без шаблонов используйте обычный REPLACE, который есть везде.
Строковые функции · null-handling
COALESCE · NULLIF · COUNT · SUBSTR · CAST · CONCAT
Открыть SQL-тренажёр (565 задач) →