MySQL用于替换为通配符

tin*_*ime 12 mysql sql replace

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

UPDATE table
SET Configuration = REPLACE(Configuration,
     "<tag>%%ANY_VALUE%%</tag>"
     "<tag>NEW_DATA</tag>");
Run Code Online (Sandbox Code Playgroud)

以便

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

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

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

Bil*_*win 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)
    )
Run Code Online (Sandbox Code Playgroud)

但是,这对于多次出现的情况不起作用<tag>.

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