Обновление части строки в MySQL: пример с подстроками

Пройдите тест, узнайте какой профессии подходите

Я предпочитаю
0%
Работать самостоятельно и не зависеть от других
Работать в команде и рассчитывать на помощь коллег
Организовывать и контролировать процесс работы

Быстрый ответ

Если вам требуется обновить фрагмент строки в MySQL, наилучшим решением станет функция REPLACE:

SQL
Скопировать код
UPDATE your_table
SET your_column = REPLACE(your_column, 'old_string', 'new_string')
WHERE your_column LIKE '%old_string%';

В данном скрипте 'old_string' будет заменено на 'new_string' в тех строках столбца, которые соответствуют заданному условию.

Кинга Идем в IT: пошаговый план для смены профессии

А если размер заменяемой строки не совпадает с новой строкой? Используйте CHAR_LENGTH

В случае, когда новая строка отличается по размеру от исходной, вам на помощь прийдет функция CHAR_LENGTH:

SQL
Скопировать код
UPDATE your_table
SET your_column = CONCAT(
  LEFT(your_column, CHAR_LENGTH('old_string')),
  'new_string',
  SUBSTRING(your_column, CHAR_LENGTH('old_string') + 1)
)
WHERE your_column LIKE '%old_string%';

Функция CHAR_LENGTH измерит длину 'old_string' и поможет деликатно вставить 'new_string' на ее место.

Усложняем задачу с помощью Regex

Для работы с более сложноструктурированными шаблонами незаменимой станет функция REGEXP:

SQL
Скопировать код
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, 'old_pattern', 'new_string')
WHERE your_column REGEXP 'old_pattern';

REGEXP — это незаменимый инструмент при работе с неклассическими шаблонами строк.

Время логических конструкций — знакомимся с CASE

Когда обновление информации зависит от специфических условий, на помощь придет конструкция CASE:

SQL
Скопировать код
UPDATE your_table
SET your_column = CASE
  WHEN your_column LIKE '%condition1%' THEN REPLACE(your_column, 'old_string1', 'new_string1')
  WHEN your_column LIKE '%condition2%' THEN REPLACE(your_column, 'old_string2', 'new_string2')
  ELSE your_column
END;

CASE действует как кондициональный оператор, позволяя выбрать определенную опцию в зависимости от выполнения заданных условий.

Убираем лишнее с помощью TRIM

Для удаления неизбежно возникающих лишних символов в строках, используйте функцию TRIM:

SQL
Скопировать код
UPDATE your_table
SET your_column = TRIM(BOTH 'Character_to_remove' FROM your_column);

TRIM позволяет аккуратно и надежно удалять указанные символы с обеих сторон заданной строки.

Визуализация

В качестве примера рассмотрим:

Markdown
Скопировать код
Район: ["Дом 🔴 Красный", "Дом 🟡 Желтый", "Дом 🔵 Синий"]

Нам требуется заменить цвет Красного дома на Зелёный:

SQL
Скопировать код
UPDATE neighborhood SET color = REPLACE(color, 'Red', 'Green') WHERE color LIKE '%Red%';

В результате получаем:

Markdown
Скопировать код
Район: ["Дом 🟢 Зелёный", "Дом 🟡 Желтый", "Дом 🔵 Синий"]

Можно заметить, что район приобрёл совершенно новый облик, не так ли?

Используем конкатенацию для точного соответствия

При помощи функции CONCAT можно точно обновить строки:

SQL
Скопировать код
UPDATE your_table
SET your_column = CONCAT(
  SUBSTRING(your_column, 1, CHAR_LENGTH('old_string') – 1),
  'new_string',
  SUBSTRING(your_column FROM CHAR_LENGTH('old_string') + 1)
)
WHERE your_column LIKE '%old_string%';

CONCAT выполняет роль незаменимого помощника, позволяя достоверно объединять фрагменты строк.

Логика на помощь: время использовать CASE для сложных сценариев

CASE дает возможность настройки сложных алгоритмов обновления строк:

SQL
Скопировать код
UPDATE your_table
SET your_column = CASE
  WHEN your_column LIKE '%bob%' THEN REPLACE(your_column, 'bob', 'Robert')
  WHEN your_column LIKE '%cafe%' THEN REPLACE(your_column, 'cafe', 'Кафетерий')
  ELSE your_column
END
WHERE your_column LIKE '%bob%' OR your_column LIKE '%cafe%';

С использованием CASE открываются гибкие возможности для настройки обновления в зависимости от дифференцированных условий.

Полезные материалы

  1. MySQL :: Руководство по MySQL 8.0 :: 12.8 Функции и операторы строк
  2. MySQL :: Руководство по MySQL 8.0 :: 12.8.2 Регулярные выражения
  3. SQL | Оператор UPDATE – GeeksforGeeks