小工具      在线工具  汉语词典  css  js  c++  java

Mysql JSON_EXTRACT 获取JSON数据

Java,mysql,json,数据库 额外说明

收录于:97天前

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": "方便面", "规格": "一袋001"}, {"goodsType": "方便面", "规格": "一袋捆” }]}

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

查询语句如下:

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

. . .

相关推荐

额外说明

Linux基础知识——后台工作和程序管理

后台工作和程序管理 后台工作和程序是什么? 父程序和子程序 后台工作 后台运行——& 丢到后台暂停——Ctrl+z 观察当前后台工作——jobs 将后台工作转为前台运行——fg 让后台工作运行——bg 管理后台工作——kill -num %jobnumb

额外说明

js中如何遍历map类型

1、forEach遍历 函数中第一个参数是属性值,第二个参数是属性 map.forEach(function(value,key){ console.log(value,key); }); 2、for-of遍历 for(let item of m

额外说明

将eureka以docker方式部署

    将jar dockerfile上传服务器   Dockerfile   #这里用的8-apline镜像文件小点,下载快点 FROM hub.c.163.com/library/java:8-alpine #将宿主机下的jar文件放到容器app.

额外说明

《PostgreSQL开发指南》第23章事务与并发控制

《PostgreSQL 开发指南》专栏目录 第 01 篇 课程介绍 第 02 篇 PostgreSQL 简介 第 03 篇 PostgreSQL 安装 第 04 篇 角色与用户 第 05 篇 数据库与模式 第 06 篇 管理数据表 第 07 篇 管理表空

额外说明

JavaScript怎么判断对象是否为空

判断对象是否为空 for in 遍历对象,拿到的数据是对象的属性 Object.keys方法是将目标对象转换成数组,通过数组的length属性长度判断 JSON.stringfy()将目标对象转成字符串 <!DOCTYPE html> <html lan

额外说明

ThreadLocal场景之log日志

1.ThreadLocal 的定义和作用 ThreadLocal和Synchonized都用于解决多线程并发访问。但是ThreadLocal与synchronized有本质的区别。Synchronized用于线程间的数据共享,而ThreadLocal则用

额外说明

java开放地址法和链地址法解决hash冲突

hashMap对各位小伙们来说,没有不知道的了,使用过的人想必或多或少的都了解一点hashMap的底层实现原理,总结来说就是,数组+链表,至于源码的实现,大家可参看源码,今天想说的是hashMap是怎么解决hash冲突的呢? 首先看一张图, 从这张图也大

额外说明

IDEA新建一个js项目(hello)并执行js脚本

1)安装Node.js 具体操作参考: https://blog.csdn.net/xijinno1/article/details/128774375 2)。在IDEA中新建一个js项目(hello world) 1、新建js项目如下图 2、选择示例代

ads via 小工具