Как я могу использовать mySQL replace() для замены строк в нескольких записях?

У нас есть база данных, в которой есть несколько записей с некоторыми плохими данными в одном столбце, в которых встроенный редактор избежал некоторых вещей, которые не должны были экранироваться, и они ломали сгенерированные ссылки.

Я хочу запустить запрос, чтобы заменить плохие символы во всех записях, но не могу понять, как это сделать. Я нашел функцию replace() в MySQL, но как я могу использовать ее внутри запроса?

Например, какой был бы правильный синтаксис, если бы я хотел заменить строку &lt; на фактическую скобку меньшего размера (<) во всех записях, имеющих &lt; в столбце articleItem? Можно ли это сделать в одном запросе (т.е. Выбрать и заменить все одним махом), или мне нужно делать несколько запросов? Даже если это несколько запросов, как я могу использовать replace() для замены на значение поля более чем на одну запись?

Ответ 1

На очень общем уровне

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'SearchForThis', 'ReplaceWithThis')

WHERE SomeOtherColumn LIKE '%PATTERN%'

В вашем случае вы говорите, что они были экранированы, но поскольку вы не указали, как они были экранированы, скажем, что они были экранированы до GREATERTHAN

UPDATE MyTable

SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

WHERE articleItem LIKE '%GREATERTHAN%'

Поскольку ваш запрос действительно будет работать внутри строки, предложение WHERE, выполняющее сопоставление с шаблоном, вряд ли улучшит производительность, на самом деле это создаст больше работы для сервера. Если у вас нет другого члена предложения WHERE, который сделает этот запрос более эффективным, вы можете просто выполнить обновление следующим образом:

UPDATE MyTable
SET StringColumn = REPLACE (StringColumn, 'GREATERTHAN', '>')

Вы также можете вложить несколько вызовов REPLACE

UPDATE MyTable
SET StringColumn = REPLACE (REPLACE (StringColumn, 'GREATERTHAN', '>'), 'LESSTHAN', '<')

Вы также можете сделать это, когда вы выбираете данные (в отличие от того, когда вы его сохраняете).

Итак, вместо:

SELECT MyURLString From MyTable

Вы могли бы сделать

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable

Ответ 2

UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

Ответ 3

Проверьте это

UPDATE some_table SET some_field = REPLACE("Column Name/String", 'Search String', 'Replace String')

Например, с образцовой строкой:

UPDATE some_table SET some_field = REPLACE("this is test string", 'test', 'sample')

EG с именем столбца/поля:

UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')

Ответ 4

вы можете написать хранимую процедуру следующим образом:

CREATE PROCEDURE sanitize_ ТАБЛИЦА()

НАЧАТЬ

#replace space с подчеркиванием

UPDATE Таблица SET Имя поля= REPLACE ( Имя поля, "," _ ") ГДЕ Имя_файла не NULL;

#delete dot

UPDATE Таблица SET Имя поля= REPLACE ( Имя поля,". "," ") WHERE Имя_файла не NULL;

#delete (

UPDATE Таблица SET Имя поля= REPLACE ( Имя поля," ( "," ") ГДЕ Имя_файла не NULL;

#delete)

UPDATE Таблица SET Имя поля= REPLACE ( Имя поля," ) "," ") ГДЕ Имя поля не NULL;

# удалить или удалить любой char, который вы хотите

#..........................

КОНЕЦ

Таким образом, вы имеете модульное управление таблицей.

Вы также можете обобщить хранимую процедуру, сделав ее параметрической с таблицей для настройки входного параметра