Mysql的JSON格式字段实用操作函数JSON_CONTAINS、JSON_SEARCH、JSON_EXTRACT


前言

在开发中难免会遇见在Mysql字段存储JSON格式数据的业务情况,记录几种常用函数的
用法。


一、示例数据

建一张表,字段memo存储JSON格式数据

CREATE TABLE `user` (
  `id` bigint NOT NULL AUTO_INCREMENT,
  `name` bigint DEFAULT NULL COMMENT '姓名',
  `age` bigint DEFAULT NULL COMMENT '年龄',
  `sex` bigint DEFAULT NULL COMMENT '性别',
  `memo` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci COMMENT '说明',
  PRIMARY KEY (`id`)
) 

memo的数据为:

{
	"location":"位置1",
	"purchaseTime":"2022-07-04",
	"assetsTypeName":"CPU",
	"useDepartment":"测试部",
	"strId":11
}

二、使用

1.JSON_CONTAINS

JSON_CONTAINS 函数用于检查一个JSON文档是否包含另一个JSON文档或值。它返回1表示包含,返回0表示不包含,返回NULL表示参数有误或不兼容。

示例:查询符合条件的user数据

SELECT * from user
WHERE memo IS NOT NULL 
and JSON_CONTAINS(memo, '"位置1"', '$.location') 
and JSON_CONTAINS(memo, '"测试部"', '$.useDepartment');

SELECT * from user
WHERE memo IS NOT NULL 
and JSON_CONTAINS(memo, '11', '$.strId');

$.location:数据路径。
“位置1”:具体值,注意这里匹配具体值的时候字符值要加双引号(“”),和上面JSON值对上,数字类型正常匹配就行。

2.JSON_SEARCH

JSON_SEARCH 函数用于在JSON文档中搜索指定值,返回该值的路径或位置。有两种模式:“one"和"all”,分别返回第一个匹配的位置或所有匹配的位置。

示例:查询符合条件的user数据

SELECT * FROM user
WHERE memo IS NOT NULL 
and JSON_SEARCH(memo, 'one', '位置1');


SELECT * FROM user
WHERE memo IS NOT NULL 
and JSON_SEARCH(memo, 'all', '位置1');

3.JSON_EXTRACT

JSON_EXTRACT 函数用于从JSON文档中提取一个或多个值。

示例:查询符合条件的useDepartment

# 方式1
SELECT 
    DISTINCT TRIM(BOTH '"' FROM JSON_EXTRACT(memo, '$.useDepartment')) AS useDepartment
FROM user
WHERE memoIS NOT NULL
AND JSON_EXTRACT(memo, '$.purchaseTime') ='2022-07-03'
AND JSON_EXTRACT(memo, '$.assetsTypeName') = 'CPU'
AND JSON_EXTRACT(memo, '$.location') = '位置1'

# 方式2
#  ->  等效于 JSON_EXTRACT()
SELECT 
    DISTINCT TRIM(BOTH '"' FROM JSON_EXTRACT(memo, '$.useDepartment')) AS useDepartment
FROM user
WHERE memoIS NOT NULL
AND memo->'$.purchaseTime' ='2022-07-03'
AND memo->'$.assetsTypeName' = 'CPU'
AND memo->'$.location' = '位置1'

$.location:数据路径。
TRIM(BOTH ‘"’ FROM …):移除字符串两边的双引号。

补充
TRIM()函数:
从字符串中删除不必要的前导和后缀字符
用法:
TRIM([{BOTH|LEADING|TRAILING} [removed_str]] FROM str)


总结

mysql针对JSON数据处理的函数还有很多,有兴趣的小伙伴可以自行了解学习。
Mysq官网
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值