mysql操作json字段实现数据过滤和查询

6 篇文章 1 订阅
4 篇文章 0 订阅

一.前置条件

1.数据库表准备

以下是数据库中的表和字段,其中包含了很多json字段表名为:t_erecord_device_ext

 其中produce_info字段存储数据结构如下所示

实际数据如下所示

下面的需求都是需要基于这张表 操作json字段实现数据过滤和查询

二.mysql根据json数据过滤

1.需求:筛选produce_info字段中、brand不为空和不为null的数据

sql实现如下:

SELECT
	*
FROM
	view_device_info 
WHERE
	produce_info ->> '$.brand' != '' 
	AND produce_info ->> '$.brand' != 'null' 

查询结果如下:

三.mysql去除json字段brand查询出来的双引号,并且根据brand分组、查询brand同类型的device_id并使用逗号拼接,过滤空值和null值

sql实现如下:

SELECT
	json_unquote(json_extract( produce_info, '$.brand' )) AS brand,
	group_concat( device_id ) AS deviceIds 
FROM
	view_device_info 
WHERE
	STATUS = 0 
	AND produce_info ->> '$.brand' != '' 
	AND produce_info ->> '$.brand' != 'null' 
	AND owner_id = 'AHHF_QHHFY_20180408' 
GROUP BY
	brand

查询结果如下:

四.mysql操作json数组的方式

表中json字段如下

score_details 
[{"score":60.0,"indicatorId":"1"},{"score":60.0,"indicatorId":"26"},{"score":60.0,"indicatorId":"9"},{"score":60.0,"indicatorId":"20"}]

# 如果score_details 无数据,赋值为空数组

SELECT
json_extract(if(LENGTH(score_details)>0,score_details, '[]'),"$[0]") one,
json_extract(if(LENGTH(score_details)>0,score_details, '[]'),"$[1]") two ,
json_extract(if(LENGTH(score_details)>0,score_details, '[]'),"$[2]") three,
json_extract(if(LENGTH(score_details)>0,score_details, '[]'),"$[3]") four,
json_extract(if(LENGTH(score_details)>0,score_details, '[]'),"$[4]") five
FROM risk_assess_record where  id = '1096261165882802176lnesxwfewolu19'  

查询结果如下

得到这个结果后再根据原先处理json的方式去拿数据即可

 sql解释如下:

json_unquote:去除json中的双引号
json_extract:解析json
group_concat:合并聚合后的需要拼接的字段
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Mr Tang

你的鼓励是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值