Track
Функция SQL REPLACE() полезна для обработки текста: она может заменить часть строки на указанную подстроку. Чаще всего функцию SQL REPLACE() используют, чтобы изменить все вхождения подстроки внутри строки в заданном наборе данных.
Манипуляции с текстом важны в SQL, поскольку помогают очищать и преобразовывать данные для эффективного анализа. В этом руководстве я покажу, как её использовать.
Если вы стремитесь стать дата-сайентистом или инженером по данным, рекомендую пройти курс DataCamp Introduction to SQL, чтобы разобраться в основах функций SQL для трансформации данных. Также загляните в наш гид по строковым функциям SQL, чтобы освежить базовые понятия перед углублением в тему.
Кратко
-
REPLACE(string, old_substring, new_substring)заменяет все вхождения подстроки за один вызов -
Связывайте вызовы, чтобы заменить несколько подстрок:
REPLACE(REPLACE(col, 'a', 'b'), 'c', 'd') -
Передайте пустую строку, чтобы удалить символы:
REPLACE(phone, '-', '') -
Если любой аргумент равен
NULL, функция возвращаетNULLдля этой строки -
Чувствительность к регистру зависит от вашей СУБД и сопоставления: по умолчанию SQL Server и MySQL нечувствительны к регистру; PostgreSQL чувствителен
Понимание функции SQL REPLACE()
Функция REPLACE() в SQL ищет указанную подстроку или строку в столбце и заменяет её другой строкой. Ниже показан базовый пример использования функции REPLACE(). Аргументы функции включают:
-
string: исходная строка, в которой нужно выполнить замену. -
old_substring: подстрока, подлежащая замене. -
new_substring: подстрока, которой заменяется старая.
REPLACE(string, old_substring, new_substring)
При использовании функции REPLACE() для изменения строк в таблице запрос будет иметь следующий синтаксис, где:
-
column_name: столбец, в котором ищутся вхождения подстроки. -
old_substring: подстрока, подлежащая замене. -
new_substring: подстрока, которой заменяется старая.
-- Select the description column from the products table,
-- replacing occurrences of 'old' with 'new'
SELECT
REPLACE(column_name, 'old_substring', 'new_substring') AS updated_column
FROM
Products;
Пример REPLACE()
Функция SQL REPLACE() изменяет или подставляет все вхождения строки указанной подстрокой или строкой. В примере ниже функция REPLACE() в SQL заменила значение old на new в столбце description. Запрос обрабатывает каждую строку, чтобы заменить старую строку новой.
-- Select the description column from the products table,
-- replacing occurrences of 'old' with 'new'
SELECT
REPLACE(description, 'old', 'new') AS updated_description
FROM
Products;
Примечание: Базы данных MySQL, PostgreSQL, Oracle и SQL Server поддерживают функцию REPLACE().
Сценарии использования REPLACE() в SQL
У функции SQL REPLACE() много полезных сценариев в обработке текста и преобразовании данных. Вот некоторые из них:
Базовая замена
Вы можете использовать функцию SQL REPLACE() для выполнения базовой замены. Предположим, у нас есть следующая таблица в базе данных SQL Server:
Пример таблицы Products. Изображение автора.
С помощью следующего SQL-запроса можно использовать функцию REPLACE(), чтобы изменить статус old на new.
SELECT
product_id,
product_name,
price,
REPLACE(status, 'old', 'new') AS updated_status
FROM Products;
Результирующая таблица будет выглядеть как показано ниже.

Таблица обновлена с помощью SQL REPLACE(). Изображение автора.
Замена нескольких подстрок
Если нужно заменить несколько подстрок, используйте цепочку вызовов REPLACE(). Здесь мы обновляем значение old на outdated, а new на fresh.
-- Chain multiple REPLACE() functions to replace 'old' with 'outdated' and 'new' with 'fresh'
SELECT
product_id,
product_name,
price,
REPLACE(REPLACE(status, 'old', 'outdated'), 'new', 'fresh') AS updated_status
FROM Products;
Результирующая таблица показана ниже.

Таблица обновлена с заменой нескольких подстрок. Изображение автора.
Удаление символов
Передайте пустую строку в качестве третьего аргумента, чтобы полностью удалить символы. Это самый простой способ избавиться от знаков препинания, лишних пробелов или форматирующих символов в столбце.
-- Remove dashes from phone numbers
SELECT
customer_id,
REPLACE(phone_number, '-', '') AS clean_phone
FROM Customers;
Например, '555-867-5309' превращается в '5558675309'. Тем же приёмом можно удалить специальные символы, артефакты кодировки или нежелательные пробелы в импортированных данных.
Учет чувствительности к регистру
Чувствительность REPLACE() к регистру зависит от вашей СУБД и сопоставления. По умолчанию PostgreSQL чувствителен к регистру, поэтому REPLACE(col, 'Old', 'New') не совпадёт с 'old'. SQL Server и MySQL следуют сопоставлению столбца или базы данных — в большинстве стандартных установок используется регистронезависимое сопоставление, поэтому REPLACE() будет находить совпадения вне зависимости от регистра.
Когда нужно выполнять замену без учёта регистра, используйте функции UPPER() или LOWER() для преобразования текста перед заменой. Этот подход помогает сохранять единообразие значений.
-- Replace 'OLD' with 'OUTDATED', handling case sensitivity by converting to upper case
SELECT
product_id,
product_name,
price,
REPLACE(UPPER(status), 'OLD', 'OUTDATED') AS updated_status
FROM Products;

Таблица обновлена с помощью функций REPLACE() и UPPER(). Изображение автора.
-- Replace 'old' with 'outdated', handling case sensitivity by converting to lowercase
SELECT
product_id,
product_name,
price,
REPLACE(LOWER(status), 'old', 'outdated') AS updated_status
FROM Products;

Таблица обновлена с помощью функций SQL REPLACE() и LOWER(). Изображение автора.
Продвинутые приёмы
Эти техники комбинируют REPLACE() с другими функциями SQL для подстановок, выходящих за рамки простой операции «найти и заменить».
Замена с динамическими значениями
Функцию REPLACE() можно использовать для динамических замен в сочетании с другими функциями SQL. Например, с помощью функции REPLACE() вы можете использовать значение из другого столбца для замены подстроки. В примере ниже REPLACE() заменяет каждое вхождение old фактическим значением из product_name.
-- Replace 'old' with the value from product_name column
SELECT
product_id,
product_name,
price,
REPLACE(status, 'old', product_name) AS updated_status
FROM Products;

Таблица обновлена с помощью функции REPLACE() и динамических значений. Изображение автора.
Использование REPLACE() в операторах UPDATE
Функция SQL REPLACE() работает внутри операторов UPDATE для изменения значений столбцов в одной или нескольких строках. Запрос ниже обновляет значение old на outdated в столбце status.
-- Update the status column to replace 'old' with 'outdated'
UPDATE Products
SET status = REPLACE(status, 'old', 'outdated')
WHERE status LIKE '%old%';
Для более сложных сценариев, например обновления таблицы при соединении с другой, смотрите наше руководство SQL UPDATE with JOIN.
Комбинирование REPLACE() с другими строковыми функциями
Один из продвинутых приёмов — комбинировать REPLACE() с другими строковыми функциями SQL, такими как CHARINDEX() или SUBSTRING(), при замене строковых значений.
-- Replace part of the product name starting from the first space with 'Updated'
SELECT
product_id,
product_name,
price,
-- Extract the substring of product_name starting from the first space to the end
REPLACE(product_name, SUBSTRING(product_name, CHARINDEX(' ', product_name), LEN(product_name)), ' Updated') AS updated_product_name
FROM Products;
Результирующая таблица для запроса выше показана ниже.

Таблица обновлена с помощью REPLACE() и других строковых функций. Изображение автора.
Замена NULL на 0
Вы можете использовать функцию COALESCE(), чтобы заменить значение NULL запасным вариантом перед вызовом REPLACE(), как показано ниже.
-- Replace NULL with 'new' in the status column
SELECT
product_id,
product_name,
price,
REPLACE(COALESCE(status, 'NULL'), 'NULL', 0) AS updated_status
FROM Products;
Подводный камень: если любой аргумент, переданный в REPLACE(), равен NULL, функция возвращает NULL для этой строки — даже если остальные аргументы валидны. Оборачивайте столбцы, где возможен NULL, в COALESCE() до вызова REPLACE(), а не после.
Практические применения функции SQL REPLACE()
Вот ситуации, когда REPLACE() по праву занимает место в боевых запросах.
-
Очистка данных: функция
REPLACE()полезна для очистки данных — удаления и замены нежелательных символов или пробелов в строках набора данных. -
Преобразование данных: функцию
REPLACE()применяют для приведения значений к другим форматам и замены устаревших значений на новые. -
Обработка пользовательского ввода: функция
REPLACE()важна для приведения пользовательских данных к единому стандарту, принятому в конкретной базе данных. Это помогает обеспечить единообразие. -
Стандартизация текста: функция
REPLACE()стандартизирует значения в строковых столбцах для единообразия, например, приводит аббревиатуры к нижнему или верхнему регистру. -
Условная замена: функция
REPLACE()также полезна для упрощения администрирования БД — можно заменять значения по заданным правилам.
Реализации REPLACE() в конкретных СУБД
Базы данных MySQL, PostgreSQL, Oracle и SQL Server поддерживают функцию REPLACE() в SQL, и синтаксис в них схож.
-- Replace 'old' with 'new' in the status column
SELECT
product_id,
product_name,
price,
REPLACE(status, 'old', 'new') AS updated_status
FROM Products;
Производительность и лучшие практики при использовании REPLACE()
При использовании функции REPLACE() важно учитывать следующие аспекты производительности и лучшие практики.
Влияние на производительность запроса
Функция REPLACE() может влиять на производительность запроса, особенно при работе с большими наборами данных. Это происходит потому, что функция обрабатывает таблицу по строкам, и выполнение запроса может занять время.
Особенности индексирования
Проиндексируйте столбец, по которому выполняется поиск, перед запуском REPLACE() в WHERE или UPDATE. Без индекса БД будет сканировать каждую строку в поисках совпадений — особенно затратно на больших таблицах.
Мониторинг и устранение узких мест
Чтобы справиться с проблемами производительности запросов, учитывайте следующие лучшие практики:
-
Используйте инструменты профилирования БД для мониторинга производительности запросов и оптимизации при работе с большими данными.
-
При использовании
REPLACE()для изменения строковых значений регулярно поддерживайте индексы в актуальном состоянии. -
Запускайте обработку пакетами, чтобы сократить время выполнения запросов при работе с крупными наборами данных.
Чтобы изучить другие продвинутые функции SQL для преобразования данных, рекомендую курс DataCamp Learn SQL. Курс Reporting in SQL также охватывает темы оптимизации баз данных и поможет освоить техники повышения производительности.
Заключение
Функция REPLACE() покрывает большинство потребностей в подстановке текста в различных СУБД SQL. Помните о поведении с NULL — любой NULL-аргумент даёт NULL — и проверяйте настройки сопоставления, когда важна чувствительность к регистру.
Узнать больше о функции REPLACE() в SQL можно в курсах DataCamp Intermediate SQL и SQL Fundamentals. Также рекомендую карьерный трек Associate Data Analyst in SQL, чтобы глубже понять применение SQL в преобразовании данных и ускорить карьерный рост. Наконец, пройдите SQL Associate Certification, чтобы подтвердить профессиональные достижения в анализе данных с помощью SQL и выгодно выделиться на собеседованиях.
Если вам интересно узнать больше о различных функциях SQL, используемых в анализе данных, советую ознакомиться с другими моими руководствами:
Часто задаваемые вопросы
Что такое функция SQL REPLACE()?
Функция SQL REPLACE() заменяет или изменяет все вхождения указанной подстроки на другую подстроку.
Чувствительна ли функция REPLACE() к регистру?
Функция SQL REPLACE() чувствительна к регистру. Если нужно обрабатывать значения без учёта регистра, перед заменой преобразуйте строку с помощью функций UPPER или LOWER.
Может ли функция REPLACE() в SQL заменить несколько подстрок?
Если нужно заменить несколько подстрок, используйте цепочку из нескольких функций REPLACE() в SQL.
Какие базы данных SQL поддерживают функцию REPLACE()?
Все основные СУБД, включая SQL Server, Oracle, PostgreSQL и MySQL, поддерживают функцию SQL REPLACE().
Влияет ли функция SQL REPLACE() на производительность запросов?
Функция REPLACE() в SQL может влиять на производительность запроса при работе с большими наборами данных. Чтобы повысить производительность, оптимизируйте запросы и используйте корректное индексирование.