具有用于在json中替换的特殊字符的全文本。怎么了?

时间:2019-03-26 15:01:07

标签: mysql json replace sql-like

我对全文阅读并不陌生,并在MySql中查找/替换搜索,但是我不明白为什么在这种新尝试下我无法达到期望的结果。 我要做的基本上很简单。 我有一个标准表,我想查找/用另一部分替换json的一部分。 问题是我什至找不到我要查找的文本部分(当然……我确定它在那里,因为我可以在转储中找到它,或者只是将我的字段内容复制到txt文件中) 。 没有错误,没有结果。

表: id | jsonData 我想在其中搜索的字段是jsonData,mediumtext。 我想找到这个:

  

{“ id”:“ sPT”,“ label”:“技术延迟成本”,“ type”:“整数”,“值”:0}],

并替换为:

  

{“ id”:“ sPT”,“ label”:“成本延迟”,“ type”:“整数”,“ value”:0},{“ id”:“程序”,“标签” :“程序”,“类型”:“整数”,“值”:0}],

我的尝试... 简单搜索: 使用'指的是mySql手册,对于“

1。

SELECT *  FROM `projects` WHERE `jsonData` LIKE '%{"id":"sPT","label":"Cost in tech delay","type":"integer","value":0}],%'

使用“引用mySql手册\转义为”

2。

SELECT *  FROM `projects` WHERE `jsonData` LIKE "%{\"id\":\"sPT\",\"label\":\"Cost in tech delay\",\"type\":\"integer\",\"value\":0}],%"

当然还有替换,相同的sintax,没有结果:

UPDATE `projects`
 SET `jsonData` = replace(jsonData, '%{"id":"sPT","label":"Cost in tech delay","type":"integer","value":0}],%', '%{"id":"sPT","label":"Cost in tech delay","type":"integer","value":0},{"id":"program","label":"program","type":"integer","value":0}],%');

,当然,使用转义,总是得到相同的结果。 没有sintax错误,但没有结果。 如果我尝试使用较短的句子进行搜索,则会得到预期的结果...但是我确实需要确定整个字符串。

有什么主意吗? 谢谢

1 个答案:

答案 0 :(得分:1)

REPLACE()模式不支持通配符。 %与通配符LIKE一样没有通配符的特殊含义。

MySQL 8.0引入了一个新功能REGEXP_REPLACE(),它可能能够满足您的预期。

但是使用字符串替换技术来修改JSON总是容易出错。如果要在MySQL中使用JSON,则应练习使用JSON functions

更好的是完全忘记使用JSON。我还没有看到在SQL数据库中使用JSON的任何情况,通过定义普通的表和列将无法更轻松,更清晰地解决JSON。