MySQL 用通配符替换

Posted

技术标签:

【中文标题】MySQL 用通配符替换【英文标题】:MySQL for replace with wildcard 【发布时间】:2014-01-26 21:06:25 【问题描述】:

我正在尝试编写 SQL 更新以用新字符串替换特定的 xml 节点:

UPDATE table
SET Configuration = REPLACE(Configuration,
     "<tag>%%ANY_VALUE%%</tag>"
     "<tag>NEW_DATA</tag>");

这样

&lt;root&gt;&lt;tag&gt;SDADAS&lt;/tag&gt;&lt;/root&gt;

变成

&lt;root&gt;&lt;tag&gt;NEW_DATA&lt;/tag&gt;&lt;/root&gt;

这种类型的请求是否缺少语法?

【问题讨论】:

运行查询时会发生什么? 你能做到&lt;tag&gt;%&lt;/tag&gt;吗? @Smandoli 运行此查询将替换文字字符串“ANY_VALUE”。我正在寻找它来替换通配符字符串。 @2unco ive 试过了,它没有做任何类型的通配符 【参考方案1】:

更新:mysql 8.0 有一个函数REGEX_REPLACE()。

以下是我 2014 年的回答,它仍然适用于 8.0 之前的任何 MySQL 版本:


REPLACE() 不支持通配符、模式、正则表达式等。REPLACE() 仅将一个常量字符串替换为另一个常量字符串。

你可以尝试一些复杂的东西,找出字符串的前导部分和字符串的尾随部分:

UPDATE table
SET Configuration = CONCAT(
      SUBSTR(Configuration, 1, LOCATE('<tag>', Configuration)+4),
      NEW_DATA,
      SUBSTR(Configuration, LOCATE('</tag>', Configuration)
    )

但这不适用于多次出现 &lt;tag&gt; 的情况。

您可能必须将该行取回应用程序,使用您喜欢的语言执行字符串替换,然后将该行发回。换句话说,每行的三个步骤。

【讨论】:

哇,感谢您的创造性解决方案!我正在做一个应用程序端的解决方案(就像你建议的那样),但我认为你的 SQL“有限”解决方案可以解决我的问题的限制。 我对此有一些不可预测的结果,可能是我不够小心。我想看更多的例子,最好有一些预防措施,比如“哪里”,以防“标签”之一不匹配。

以上是关于MySQL 用通配符替换的主要内容,如果未能解决你的问题,请参考以下文章

Mysql查询字符串替换[重复]

用word通配符添加空格

如何在 Django ORM 中进行单字符替换( _ )的通配符搜索?

wps怎么用替换功能

pandas.DataFrame.replace 用通配符

MySQL基础之MySQL必知必会用通配符进行过滤