2014-01-08 53 views
5

我想写一个SQL更新一个新的字符串替换特定的XML节点替换:MySQL的通配符

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>

有没有语法im缺少这种类型的请求?

+0

运行查询时会发生什么? – Smandoli

+0

你可以做''吗? –

+0

运行此查询的@Smandoli将替换文字字符串“ANY_VALUE”。我正在寻找它来替换通配符字符串。 – tinkertime

回答

9

更新:MySQL的8.0有一个功能REGEX_REPLACE()

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


REPLACE()没有通配符,模式,正则表达式等替换任何支持()只替换另一个常量字符串的一个常量字符串。

你可以尝试一些复杂,挑选出字符串的开头部分和字符串的结尾部分:

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

但是当你有<tag>多次出现,这并不案件工作。

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

+0

哇,谢谢你的创意解决方案!我正在做一个应用程序方面的解决方案(就像你可能提出的那样),但我认为你的SQL“有限”解决方案可以解决我的问题。 – tinkertime