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>");
这样
<root><tag>SDADAS</tag></root>
变成
<root><tag>NEW_DATA</tag></root>
这种类型的请求是否缺少语法?
【问题讨论】:
运行查询时会发生什么? 你能做到<tag>%</tag>
吗?
@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)
)
但这不适用于多次出现 <tag>
的情况。
您可能必须将该行取回应用程序,使用您喜欢的语言执行字符串替换,然后将该行发回。换句话说,每行的三个步骤。
【讨论】:
哇,感谢您的创造性解决方案!我正在做一个应用程序端的解决方案(就像你建议的那样),但我认为你的 SQL“有限”解决方案可以解决我的问题的限制。 我对此有一些不可预测的结果,可能是我不够小心。我想看更多的例子,最好有一些预防措施,比如“哪里”,以防“标签”之一不匹配。以上是关于MySQL 用通配符替换的主要内容,如果未能解决你的问题,请参考以下文章