[MYSQL]删除JSON数组中特定数字

这问题折腾了我一下午,首先是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

本站文章未经文下加注授权不得拷贝发布。

0 0 投票数
打分
订阅评论
提醒
guest
2 评论
内联反馈
查看所有评论
seabye
游客
10 月 前

← ←谷歌遇到。破mysql连个数组查找方法都没有(开心的举起了小而美的sqlite)。

最后由seabye编辑于10 月 前