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


166

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

我想运行一个查询来替换所有记录中的错误字符,但无法弄清楚该怎么做。我在MySQL中找到了该replace()函数,但是如何在查询中使用它呢?

例如,如果我想用该列中所有记录中&lt;的实际小于尖括号(<)替换字符串,那么正确的语法是什么?是否可以在单个查询中完成(即一次选择并替换所有内容),还是必须执行多个查询?即使是多个查询,如何使用多条记录对字段值进行替换?&lt;articleItemreplace()


5
在执行任何操作之前,请确保还备份数据库。您还将使用update来更新任何字段。
马特2010年


Answers:


395

在非常普通的水平上

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


7
次要问题:GREATERTHAN是'>'
Olivier Dulac

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

修复了&lt;。您需要使用&的编码,例如:&amp;:)
Dan J

我重新编辑了。谢谢你让我知道。在我说我不知道​​该怎么做之后,片刻就让我破晓。那就是我的世界运作的方式。:)
simshaun

6

检查一下

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

您可以编写这样的存储过程:

创建过程sanitize_ TABLE()

开始

#用下划线替换空间

更新 SET FieldName = REPLACE(FieldName,“”,“ _”)WHERE FieldName不为NULL;

#删除点

更新 SET FieldName = REPLACE(FieldName,“。”,“”)WHERE FieldName不为NULL;

#delete(

更新 SET FieldName = REPLACE(FieldName,“(”,“”)WHERE FieldName不为NULL;

#delete)

更新 SET FieldName = REPLACE(FieldName,“)”,“”)WHERE FieldName不为NULL;

#raplace或删除您想要的任何字符

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

结束

这样,您就可以对表进行模块化控制。

您还可以使用表对参数化表进行通用化,以清理输入参数


1
这些空检查是多余的
kiedysktos

是否有任何简单安全的工具来创建mysql存储过程?
伊万·斯劳特

0

这将为您提供帮助。

UPDATE play_school_data SET title= REPLACE(title, "&#39;", "'") WHERE title = "Elmer&#39;s Parade";

结果:

title = Elmer's Parade
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.