Mysql JSON_EXTRACT 获取JSON数据

 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 '%垃圾袋%' 

  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值