Обновление части строки в MySQL: пример с подстроками
Быстрый ответ
Если вам требуется обновить фрагмент строки в MySQL, наилучшим решением станет функция REPLACE
:
UPDATE your_table
SET your_column = REPLACE(your_column, 'old_string', 'new_string')
WHERE your_column LIKE '%old_string%';
В данном скрипте 'old_string'
будет заменено на 'new_string'
в тех строках столбца, которые соответствуют заданному условию.
А если размер заменяемой строки не совпадает с новой строкой? Используйте CHAR_LENGTH
В случае, когда новая строка отличается по размеру от исходной, вам на помощь прийдет функция CHAR_LENGTH
:
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
:
UPDATE your_table
SET your_column = REGEXP_REPLACE(your_column, 'old_pattern', 'new_string')
WHERE your_column REGEXP 'old_pattern';
REGEXP
— это незаменимый инструмент при работе с неклассическими шаблонами строк.
Время логических конструкций — знакомимся с CASE
Когда обновление информации зависит от специфических условий, на помощь придет конструкция CASE
:
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
:
UPDATE your_table
SET your_column = TRIM(BOTH 'Character_to_remove' FROM your_column);
TRIM
позволяет аккуратно и надежно удалять указанные символы с обеих сторон заданной строки.
Визуализация
В качестве примера рассмотрим:
Район: ["Дом 🔴 Красный", "Дом 🟡 Желтый", "Дом 🔵 Синий"]
Нам требуется заменить цвет Красного дома на Зелёный:
UPDATE neighborhood SET color = REPLACE(color, 'Red', 'Green') WHERE color LIKE '%Red%';
В результате получаем:
Район: ["Дом 🟢 Зелёный", "Дом 🟡 Желтый", "Дом 🔵 Синий"]
Можно заметить, что район приобрёл совершенно новый облик, не так ли?
Используем конкатенацию для точного соответствия
При помощи функции CONCAT
можно точно обновить строки:
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
дает возможность настройки сложных алгоритмов обновления строк:
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
открываются гибкие возможности для настройки обновления в зависимости от дифференцированных условий.