我们有一个数据库,其中包含一堆记录,其中一列中包含一些不良数据,其中嵌入式编辑器转义了一些本不应该被转义的内容,并且它正在破坏生成的链接。
我想运行一个查询来替换所有记录中的错误字符,但无法弄清楚如何操作。我在MySQL中找到the replace()
function,但我如何在查询中使用它?
例如,如果我想在所有<
in的记录中用实际小于角括号(<
)替换字符串<
,那么正确的语法是什么? articleItem
列?它可以在一个查询中完成(即一次性选择和替换所有),还是我必须进行多次查询?即使是多个查询,如何使用replace()
替换多个记录上的字段值?
答案 0 :(得分:377)
非常通用的水平
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
答案 1 :(得分:22)
UPDATE some_table SET some_field = REPLACE(some_field, '<', '<')
答案 2 :(得分:5)
检查
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 with Column / Field Name:
UPDATE some_table SET some_field = REPLACE(columnName, 'test', 'sample')
答案 3 :(得分:4)
您可以编写如下存储过程:
CREATE PROCEDURE sanitize_ TABLE ()
BEGIN
#replace space with underscore
更新 表 设置 FieldName = REPLACE( FieldName < / strong>,“”,“_”)WHERE FieldName 不为NULL;
#delete dot
更新 表 设置 FieldName = REPLACE( FieldName < / strong>,“。”,“”)WHERE FieldName 不为NULL;
#delete(
更新 表 设置 FieldName = REPLACE( FieldName < / strong>,“(”,“”)WHERE FieldName 不为NULL;
#delete)
更新 表 设置 FieldName = REPLACE( FieldName < / strong>,“)”,“”)WHERE FieldName 不是NULL;
#raplace或删除您想要的任何字符
#..........................
END
通过这种方式,您可以对表进行模块化控制。
您还可以对存储过程进行概括,使用表格参数化以保护输入参数
答案 4 :(得分:0)
这将为您提供帮助。
UPDATE play_school_data SET title= REPLACE(title, "'", "'") WHERE title = "Elmer's Parade";
结果:
title = Elmer's Parade