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

Posted

技术标签:

【中文标题】如何使用 mySQL replace() 替换多条记录中的字符串?【英文标题】:How can I use mySQL replace() to replace strings in multiple records? 【发布时间】:2011-05-15 08:17:36 【问题描述】:

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

我想运行一个查询来替换所有记录中的坏字符,但不知道该怎么做。我在 mysql 中找到了the replace() function,但是如何在查询中使用它?

例如,如果我想在 articleItem 列中包含 < 的所有记录中将字符串 < 替换为实际小于尖括号 (<),那么正确的语法是什么?可以在单个查询中完成(即一口气选择并替换所有内容),还是我必须进行多个查询?即使是多个查询,如何使用replace()对多条记录上的字段值进行替换?

【问题讨论】:

在您执行任何操作之前,请确保您也备份了数据库。您还可以使用 update 来更新任何字段。 MySql - Way to update portion of a string?的可能重复 MySQL search and replace some text in a field的可能重复 【参考方案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', '&gt;') as MyURLString From MyTable

【讨论】:

小问题:GREATERTHAN is '>'【参考方案2】:
UPDATE some_table SET some_field = REPLACE(some_field, '&amp;lt;', '&lt;')

【讨论】:

修复了&amp;lt; s。你需要使用 & 的编码,像这样:&amp;amp; :) 我重新编辑了它。谢谢你让我知道。在我说我不知道​​怎么做之后,我突然明白了。我的世界就是这样运作的。 :) 谢谢!这完美地将域 url 更新为大型博客数据库中的子字符串替换!【参考方案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_TABLE()

开始

#用下划线替换空格

更新 表格 SET FieldName = REPLACE(FieldName," ","_") WHERE FieldName 不为 NULL;

#delete 点

更新 表格 SET FieldName = REPLACE(FieldName,".","") WHERE FieldName 不为 NULL;

#delete (

更新 表格 SET FieldName = REPLACE(FieldName,"(","") WHERE FieldName 不为 NULL;

#delete)

更新 表格 SET FieldName = REPLACE(FieldName,")","") WHERE FieldName 不为 NULL;

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

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

结束

通过这种方式,您可以对表格进行模块化控制。

你也可以泛化存储过程制作,用表格参数化处理输入参数

【讨论】:

那些空检查是多余的 有什么简单安全的工具来创建mysql存储过程吗?【参考方案5】:

这会对你有所帮助。

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

结果:

title = Elmer's Parade

【讨论】:

以上是关于如何使用 mySQL replace() 替换多条记录中的字符串?的主要内容,如果未能解决你的问题,请参考以下文章

如何使用REPLACE和正则表达式替换MYSQL中字符串中的多个关键字[重复]

js的replace如何全部替换目标字符串

js的replace如何全部替换目标字符串

如何用regexp_replace在mysql中用特定字符替换多个字符?

replace MYSQL字符替换函数sql语句分享(正则判断)

MySQL中 replace 替换字符