MySQL用于替换为通配符

时间:2014-01-08 16:27:07

标签: mysql sql replace

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

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

那样

<root><tag>SDADAS</tag></root>

变为

<root><tag>NEW_DATA</tag></root>

此类请求是否缺少语法?

2 个答案:

答案 0 :(得分:16)

更新: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)
    )

但是,当您多次出现<tag>时,这不起作用。

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

答案 1 :(得分:0)

在mysql中没有inbuild函数,例如oracle中的regexp_replce来解决这样的问题。

我们必须使用第三方功能,否则我们必须实现自我。

希望此链接可以帮助您解决问题。

http://www.nacodes.com/2013/01/29/Create-Function-MySQL-Regex-replace-TRIM-for-MySQL