irpas技术客

Mysql JSON_EXTRACT 获取JSON数据_mysql 获取json_水桶前辈

网络投稿 2287

?1. mysql数据库中的ext存的是json字段,如下:

CREATE TABLE `volume` ( `volumeId` int(11) NOT NULL AUTO_INCREMENT COMMENT '主键', `ext` json DEFAULT NULL COMMENT '扩展字段', PRIMARY KEY (`volumeId`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8mb4 COMMENT='量表'

具体存的值是一个json对象套了个数组,数组里又是对象,如下:

?2. 我们的目标是要获取9月的monthVolume之和,9月的dayVolume之和?

关于JSON_EXTRACT获取JSON串的语法,请自行百度,这里我直接列sql语句,如下,

SELECT JSON_EXTRACT(`ext` , '$.monthList') AS fieldModels , // 先获取这个月份的数组 JSON_EXTRACT( JSON_EXTRACT(`ext` , '$.monthList') , "$[8].monthVolume" // 9月的monthVolume(下表从0开始) ) AS monthVol , JSON_EXTRACT( JSON_EXTRACT(`ext` , '$.monthList') , "$[8].dayVolume" // 9月的dayVolume(下表从0开始) ) AS dayVol FROM `volume`

通过上面的sql语句就拿到了monthVol和dayVol的数据,如下截图:

拿到了这两列数据,接下来就简单了,直接求和。

SELECT sum(monthVol) , sum(dayVol) FROM ( SELECT JSON_EXTRACT(`ext` , '$.monthList') AS fieldModels , JSON_EXTRACT( JSON_EXTRACT(`ext` , '$.monthList') , "$[8].monthVolume" ) AS monthVol , JSON_EXTRACT( JSON_EXTRACT(`ext` , '$.monthList') , "$[8].dayVolume" ) AS dayVol FROM `volume` WHERE years = 2021 AND isDelete = 0 ) list

3.? 模糊查询下面Json串里的specification字段,"$[*].specification"? 任意一个数组里包含specification的字段

测试数据如下:

?{"overLoad": 0, "goodsList": [{"goodsType": "方便面", "specification": "一袋001"}, {"goodsType": "方便袋", "specification": "一捆"}]}?

{"overLoad": 0, "goodsList": [{"goodsType": "方便面", "specification": "垃圾袋00sss222s"}, {"goodsType": "方便袋", "specification": "一捆"}]}?

查询语句如下:

select extJson from `Order` where JSON_EXTRACT(JSON_EXTRACT(`extJson`, '$.goodsList'), "$[*].specification") LIKE '%垃圾袋%'?


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。

标签: #MySQL #获取json #1 #TABLE #volume