记一次:mysql的json及json数组使用组合使用

前言:mysql中的某个字段为json,json中含有json数组,但笔者想从数组中取其中的一个符合条件的数值。

方案一、将数据取到java中解析遍历后判断符合条件

这个方案笔者实现了,但感觉既然我们使用了库,不太想将数据拿到代码中解析操作。仔细想想能否在mysql库中能否实现呢?

方案二、mysql库中解析json和json数组

话不多说,先将代码贴出来,敏感部分已做修改,这里只显示结构

sql 复制代码
SELECT
	* 
FROM
	(
	SELECT DISTINCT
		lide.id,
		lide.event_time,
		lide.event_values ->> '$.DataTime' AS happen_time,
		lide.event_values ->> '$.IndicatorReportingArray' AS daySerialNumber,
		lide.event_values ->> '$.MearsureName' AS dataSerialNumber 
	FROM
		a_event lide 
	WHERE
		lide.device_name = '123456' 
		AND lide.identifier = 'aaaa' 
		AND lide.event_values LIKE concat( '%', 'hhh', '%' ) 
		AND ( lide.event_values LIKE concat( '%', 'cc', '%' ) OR lide.event_values LIKE concat( '%', 'dd', '%' ) ) 
	ORDER BY
		happen_time DESC 
	) AS my_table,
	JSON_TABLE ( 
	my_table.daySerialNumber, 
	"$[*]" COLUMNS ( WaterQualityTestProject VARCHAR ( 255 ) PATH '$.aa', 
	event_values VARCHAR ( 255 ) PATH '$.bb' ) 
	) AS jt 
WHERE
	jt.WaterQualityTestProject = 'hhh' 
	LIMIT 10 
	;

解释:

1、lide.event_values ->> '$.MearsureName' AS dataSerialNumber

其中->>是mysqljson转换的关键字,将event_values字段的json数据提取MearsureName

2、JSON_TABLE 关键字使用

将查询出来的临时表将json数组变为一个表结构

3、my_table.daySerialNumber,

"\[\*\]" COLUMNS ( WaterQualityTestProject VARCHAR ( 255 ) PATH '.aa',

event_values VARCHAR ( 255 ) PATH '$.bb' )

) AS jt

将daySerialNumber字典的json数组按创建表结构一样解析出数组表

最后使用where条件判断,就能过滤出json数组表中想要的内容啦。美滋滋~

相关推荐
广州灵眸科技有限公司4 小时前
xfce桌面触摸校准:基于灵眸科技EASY-EAl-Orin-Nano
数据库·windows·科技
Cloud云卷云舒7 小时前
云卷云舒:从Oracle/MySQL迁移到HaishanDB:迁移评估工具核心技术拆解
mysql·oracle·ai-native·haishandb·信创数据库替换
憧憬成为web高手7 小时前
皮卡丘靶场速通--sql 2
数据库·sql·mybatis
段一凡-华北理工大学7 小时前
向量数据库实战:选型、调优与落地~系列文章12:文本分块策略实战:chunk_size 怎么选?重叠多少?
开发语言·数据库·后端·oracle·rust·工业智能体·高炉智能化
oradh9 小时前
Oracle XTTS实现跨版本迁移和升级(Oracle 11g单库升级至19C RAC集群)
数据库·oracle·11g升级19c·xtts跨版本迁移和升级
用户713335851562410 小时前
MySQL - 事务、redo/undo 日志与 MVCC
mysql
z1234567898610 小时前
2026最新两款AI编程工具深度对比实测
java·数据库·ai编程
程序猿DD10 小时前
一个 API Key,统一调用大模型、生图和联网搜索
数据库·网关
java_logo10 小时前
Docker Compose 部署 ClickHouse:快速搭建高性能列式数据库
数据库·clickhouse·docker·列式数据库·轩辕镜像·高性能数据库·clickhouse部署教程
用户713335851562411 小时前
MySQL - InnoDB 的 Buffer Pool
mysql