У нас есть база данных, в которой есть несколько записей с некоторыми плохими данными в одном столбце, в которых встроенный редактор избежал некоторых вещей, которые не должны были экранироваться, и они ломали сгенерированные ссылки.
Я хочу запустить запрос, чтобы заменить плохие символы во всех записях, но не могу понять, как это сделать. Я нашел функцию replace()
в MySQL, но как я могу использовать ее внутри запроса?
Например, какой был бы правильный синтаксис, если бы я хотел заменить строку <
на фактическую скобку меньшего размера (<
) во всех записях, имеющих <
в столбце 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, '<', '<')
Ответ 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, который вы хотите
#..........................
КОНЕЦ
Таким образом, вы имеете модульное управление таблицей.
Вы также можете обобщить хранимую процедуру, сделав ее параметрической с таблицей для настройки входного параметра