REPLACE() в SQL — замена подстроки и очистка данных

REPLACE() заменяет все вхождения одной подстроки на другую — базовый инструмент чистки данных. Аналитик применяет его, чтобы убрать лишние символы из телефонов, привести суммы к числовому виду или нормализовать текст. Функция работает одинаково в PostgreSQL, MySQL и SQLite, но всегда по точному совпадению — без регулярных выражений.

Синтаксис

REPLACE(строка, что_ищем, на_что_меняем)

Примеры использования

Пример 1: Убрать пробелы из телефона

SELECT
  REPLACE(phone, ' ', '') AS phone_clean
FROM users
LIMIT 2;

Результат:

phone_clean
-------------
+79161234567
+77011234567

Пример 2: Нормализовать сумму в число

SELECT
  REPLACE(REPLACE(amount_text, ' ', ''), ',', '.') AS amount_num
FROM payments
LIMIT 2;

Результат:

amount_num
----------
1990.00
4990.50

Пример 3: Заменить ё на е

SELECT
  REPLACE(city, 'ё', 'е') AS city_norm
FROM users
LIMIT 2;

Результат:

city_norm
---------
Орел
Королев
Порешать SQL-задачи в тренажёре →

Типичная ошибка

REPLACE регистрозависим ('ABC' не совпадёт с 'abc') и заменяет все вхождения сразу — ограничить их число или указать позицию нельзя. Это не регулярное выражение: для шаблонов нужен REGEXP_REPLACE (PostgreSQL, MySQL 8+); в SQLite такой функции нет из коробки. Если любой аргумент NULL — результат NULL.

Где спрашивают на собеседовании

Спрашивают в контексте очистки и нормализации данных. Идёт в паре с TRIM, LOWER и REGEXP_REPLACE — типичный конвейер для телефонов, сумм и текстовых ключей.

FAQ: частые вопросы про REPLACE

REPLACE регистрозависим?

Да, REPLACE учитывает регистр: 'Москва' и 'москва' для него разные строки. Чтобы искать без учёта регистра, сначала приведите строку к одному регистру через LOWER/UPPER или используйте REGEXP_REPLACE с флагом нечувствительности к регистру.

Как заменить несколько разных подстрок сразу?

Вкладывайте вызовы REPLACE друг в друга: REPLACE(REPLACE(x, 'a', ''), 'b', ''). Для более сложной логики удобнее REGEXP_REPLACE с перечислением вариантов через | в PostgreSQL или MySQL 8+.

Поддерживает ли REPLACE регулярные выражения?

Нет, REPLACE ищет только точную подстроку. Для замены по шаблону используйте REGEXP_REPLACE в PostgreSQL и MySQL 8+. В SQLite встроенного regexp_replace нет — придётся подключать расширение или чистить данные на стороне приложения.

Задачи в тренажёре по теме

Вопросы с собеседований по теме

Смежные темы SQL

Строковые функции · null-handling

Другие функции SQL

COALESCE · NULLIF · COUNT · SUBSTR · CAST · CONCAT

Открыть SQL-тренажёр (565 задач) →