2014-01-08 56 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