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

7,435次阅读
没有评论

共计 1868 个字符,预计需要花费 5 分钟才能阅读完成。

文章目录

  • 前言
  • 一、示例数据
  • 二、使用
    • 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


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'



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 官网
在这里插入图片描述

原文地址: Mysql 的 JSON 格式字段实用操作函数 JSON_CONTAINS、JSON_SEARCH、JSON_EXTRACT

    正文完
     0
    Yojack
    版权声明:本篇文章由 Yojack 于2024-10-29发表,共计1868字。
    转载说明:
    1 本网站名称:优杰开发笔记
    2 本站永久网址:https://yojack.cn
    3 本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
    4 本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
    5 本站所有内容均可转载及分享, 但请注明出处
    6 我们始终尊重原创作者的版权,所有文章在发布时,均尽可能注明出处与作者。
    7 站长邮箱:laylwenl@gmail.com
    评论(没有评论)