文章目录
- 前言
- 一、示例数据
- 二、使用
- 1.JSON_CONTAINS
- 2.JSON_SEARCH
- 3.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官网