如何使用mySQL replace()替换多个记录中的字符串?

时间:2010-11-24 20:25:21

标签: mysql replace

我们有一个数据库,其中包含一堆记录,其中一列中包含一些不良数据,其中嵌入式编辑器转义了一些本不应该被转义的内容,并且它正在破坏生成的链接。

我想运行一个查询来替换所有记录中的错误字符,但无法弄清楚如何操作。我在MySQL中找到the replace() function,但我如何在查询中使用它?

例如,如果我想在所有&lt; in的记录中用实际小于角括号(<)替换字符串&lt;,那么正确的语法是什么? articleItem列?它可以在一个查询中完成(即一次性选择和替换所有),还是我必须进行多次查询?即使是多个查询,如何使用replace()替换多个记录上的字段值?

5 个答案:

答案 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, '&lt;', '<')

答案 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, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

结果:

title = Elmer's Parade