这问题折腾了我一下午,首先是mysql中没有现成的方法来寻找数组中数字的位置,然后是谷歌百度bing用中文和英文搜索都没找到可用又不烂的办法,爆栈网有一个高票答案,但是似乎并不对,JSON_SEARCH只能用来搜索字符串在json中的位置,数字不支持,不知道他是怎么得到结果的。
经过我晚上的继续摸索,翻遍了官方所有json相关的文档,终于让我拼出了一个方案,就是用`JSON_TABLE` 先把数组转成表,然后用where剔除里面不要的数字,再用`JSON_ARRAYAGG`转回json数组,以下是示例代码
set @j='[1,2,5,8,9]'; select JSON_ARRAYAGG(b) from JSON_TABLE( @j, "$[*]" COLUMNS( b int PATH "$" ) ) as `破mysql连个数组查找方法都没有` where b<>5;
这样就可以得到结果[1, 2, 8, 9]
,5被删掉了。
这个方法虽然并不优雅,但也没办法,谁叫MySQL连在数组里找数字的位置都做不到呢。
需要注意 `JSON_TABLE` 是MySQL 8.0.4版本才开始有的,`JSON_ARRAYAGG` 是MySQL 8.0.14才有的,所以老版本无法使用此方法。不过现在应该不会还有人在用MySQL 5.x吧,不会吧不会吧不会吧。
本文发布于 https://luojia.me
本站文章未经文下加注授权不得拷贝发布。
← ←谷歌遇到。破mysql连个数组查找方法都没有(开心的举起了小而美的sqlite)。
sqlite甚至连JSON_SEARCH都没有, 要删除一个数字也只能用这种办法