ChatGPT解决这个技术问题 Extra ChatGPT

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

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

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

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

在你做任何事情之前,请确保你也备份了数据库。您还可以使用 update 来更新任何字段。

R
Raj More

在一个非常通用的水平

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


小问题:GREATERTHAN 是 '>'
s
simshaun
UPDATE some_table SET some_field = REPLACE(some_field, '&lt;', '<')

修复了 &lt; 。您需要使用 & 的编码,例如:&amp; :)
我重新编辑了它。谢谢你让我知道。在我说我不知道怎么做之后,我突然明白了。我的世界就是这样运作的。 :)
谢谢你!这完美地更新了域 url 作为巨大博客数据库中的子字符串替换!
M
Mahendra Jella

检查这个

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')

C
Community

你可以写一个这样的存储过程:

CREATE PROCEDURE sanitize_TABLE() BEGIN #replace space with underscore UPDATE Table SET FieldName = REPLACE(FieldName," ","_") WHERE FieldName is not NULL; #delete dot UPDATE Table SET FieldName = REPLACE(FieldName,".","") WHERE FieldName is not NULL; #delete (UPDATE Table SET FieldName = REPLACE(FieldName,"(","") WHERE FieldName is not NULL; #delete) UPDATE Table SET FieldName = REPLACE(FieldName,")","") WHERE FieldName is not NULL; #raplace 或删除任何你想要的字符#.......................... END

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

您还可以概括存储过程,使用表格参数化处理输入参数


那些空检查是多余的
有没有简单安全的工具来创建mysql存储过程?
S
Solomon Suraj

这将对您有所帮助。

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

结果:

title = Elmer's Parade