我对全文阅读并不陌生,并在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错误,但没有结果。 如果我尝试使用较短的句子进行搜索,则会得到预期的结果...但是我确实需要确定整个字符串。
有什么主意吗? 谢谢
答案 0 :(得分:1)
REPLACE()
模式不支持通配符。 %
与通配符LIKE
一样没有通配符的特殊含义。
MySQL 8.0引入了一个新功能REGEXP_REPLACE(),它可能能够满足您的预期。
但是使用字符串替换技术来修改JSON总是容易出错。如果要在MySQL中使用JSON,则应练习使用JSON functions。
更好的是完全忘记使用JSON。我还没有看到在SQL数据库中使用JSON的任何情况,通过定义普通的表和列将无法更轻松,更清晰地解决JSON。