我们有一个数据库,其中有一列记录中有一些不好的数据,其中一个嵌入式编辑器转义了一些不应该转义的内容,并 destruct 了生成的链接.

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

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

推荐答案

在非常普通的层面上

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 数据时执行此操作(而不是在保存数据时).

因此,与其说:

SELECT MyURLString From MyTable

你可以

SELECT REPLACE (MyURLString, 'GREATERTHAN', '>') as MyURLString From MyTable

Mysql相关问答推荐

版本升级到5.0.0后在QueryDSL中使用Enum时出错

使用复合主键更新后的MySQL触发器失败

在MySQL中查找包含无效正则表达式的行

布尔值之间的 SQL less/greater 比较会产生意外结果

从表中动态删除所有空列

mysql 代码给我的外键格式不正确

生成json数据并根据特定表的匹配条件进行过滤

使用 SELECT 时应锁定多少行 .. FOR UPDATE LIMIT 1

完全匹配 IN 子句中的所有值

sequelize 中最好的更新方法是什么

需要按总金额检索前 3 个供应商,每个类别 - 子类别

如何从具有第一行列值的表中 Select 客户的最新记录

MySQL 使用了错误的索引

SQL / MySQL:如何在WHERE IN中判断类似于OR的AND逻辑

MySQL UPDATE 锁会因为连续的 SHARE 锁而饿死吗?

基于两个单元格值的 SQL 过滤表

MySQL:如何多次加入同一张表?

函数 mysql_real_escape_string 的 PDO 类似功能是什么?

如何通过 mysql workbench 将数据导入 mysql 数据库?

int(11) 和 int(11) UNSIGNED 有什么区别?