当前位置: 首页 > ops >正文

MySQL中的JSON_CONTAINS函数用法

MySQL中的JSON_CONTAINS函数用于检查一个JSON文档(目标)是否包含另一个JSON文档(搜索值)。以下是其详细用法:

函数语法

JSON_CONTAINS(target_json, search_json [, path])
  • target_json​:要检查的目标JSON文档。
  • search_json​:要搜索的JSON值或结构。
  • path​(可选):指定在目标JSON中的具体路径。若未指定,默认检查整个文档。

返回值​:

  • 1:目标包含搜索值。
  • 0:目标不包含搜索值。
  • NULL:参数为NULL或路径不存在。

使用场景和示例

1. 检查数组是否包含元素
  • 示例表​:

    CREATE TABLE users (id INT PRIMARY KEY,tags JSON
    );
    INSERT INTO users VALUES
    (1, '["mysql", "database", "developer"]'),
    (2, '["python", "web", "tester"]'),
    (3, '["java", "backend", "developer"]');
  • 查询包含"developer"标签的用户​:

    SELECT * FROM users 
    WHERE JSON_CONTAINS(tags, '"developer"', '$');

    或简写:

    SELECT * FROM users 
    WHERE JSON_CONTAINS(tags, '"developer"');

    注意​:字符串需用双引号包裹,外层用单引号。


2. 检查对象是否包含键值对
  • 示例数据​:

    {"name": "Alice", "age": 30, "skills": ["SQL", "Java"]}
  • 查询包含"name": "Alice"的对象​:

    SELECT * FROM profiles 
    WHERE JSON_CONTAINS(data, '{"name": "Alice"}');

3. 嵌套结构和路径参数
  • 示例数据​:

    {"department": {"team": ["Alice", "Bob"], "id": 101}}
  • ​**检查team数组是否包含"Bob"**​:

    SELECT JSON_CONTAINS('{"department": {"team": ["Alice", "Bob"], "id": 101}}','"Bob"','$.department.team'
    ); -- 返回1

4. 数据类型严格匹配

JSON区分数据类型,如数字3和字符串"3"不匹配:

SELECT JSON_CONTAINS('[1, 2, 3]', '3');      -- 返回1(数值3)
SELECT JSON_CONTAINS('[1, 2, "3"]', '"3"');  -- 返回1(字符串"3")
SELECT JSON_CONTAINS('[1, 2, 3]', '"3"');   -- 返回0(类型不匹配)

5. 通配符路径
  • 示例数据​:

    {"employees": [{"name": "Alice"}, {"name": "Bob"}]}
  • ​**检查任意name是否为"Bob"**​:

    SELECT JSON_CONTAINS('{"employees": [{"name": "Alice"}, {"name": "Bob"}]}','"Bob"','$.employees[*].name'
    ); -- 返回1

注意事项

  1. 路径存在性​:若路径不存在,返回NULL

    SELECT JSON_CONTAINS('{"a": 1}', '1', '$.b'); -- 返回NULL
  2. 对象匹配​:搜索对象时,必须完全包含所有键值对。

    SELECT JSON_CONTAINS('{"a":1, "b":2}', '{"a":1}'); -- 返回1
    SELECT JSON_CONTAINS('{"a":1}', '{"a":1, "b":2}'); -- 返回0
  3. 数组子集​:搜索数组时,目标数组需包含搜索数组所有元素(顺序无关)。

    SELECT JSON_CONTAINS('[1,2,3]', '[3,1]'); -- 返回1
    SELECT JSON_CONTAINS('[1,2,3]', '[1,4]'); -- 返回0

总结

JSON_CONTAINS适用于验证JSON结构中的存在性,需注意:

  • 正确使用路径和数据类型。
  • 对象需完全匹配键值对,数组需包含所有元素。
  • 结合路径通配符(*)可灵活处理嵌套数据。
http://www.xdnf.cn/news/7732.html

相关文章:

  • 自动驾驶中的预测控制算法:用 Python 让无人车更智能
  • 微软正式发布 SQL Server 2025 公开预览版,深度集成AI功能
  • 基于R语言地理加权回归、主成份分析、判别分析等空间异质性数据分析实践技术应用
  • VLM-MPC:自动驾驶中模型预测控制器增强视觉-语言模型
  • Open CASCADE学习|刚体沿曲线运动实现方法
  • 高并发架构设计之限流
  • 【初识】内网渗透——基础概念,基本工具使用
  • 用户栈的高效解析逻辑
  • JavaWeb 开发流程
  • Java基础 Day17
  • 给几张图片和一段文字,怎么制作成带有语音的视频---php
  • 从零搭建SpringBoot Web 单体项目【基础篇】2、SpringBoot 整合数据库
  • Mysql的binlog日志
  • .NET外挂系列:4. harmony 中补丁参数的有趣玩法(上)
  • 八: 人工神经元/感知机 算法
  • Python数据可视化高级实战之一——绘制GE矩阵图
  • Windows安装MongoDb.并使用.NET 9连接
  • 深度学习+Flask 打包一个AI模型接口并部署上线
  • 【优秀三方库研读】在 quill 开源库中定义的 QUILL_LIKELY 和 QUILL_UNLIKELY 这两个宏的作用是什么
  • 【教程】Nuitka | Python打包exe新工具
  • Python 包管理工具核心指令uv sync解析
  • Brooks Polycold快速循环水蒸气冷冻泵客户使用手含电路图,适用于真空室应用
  • 什么是车载座舱产品的SRRC认证?
  • function calling简介
  • Vue组件开发深度指南:构建可复用与可维护的UI
  • python的加速方法
  • 【固废处理核心痛点】RS485转Profinet协议转换,如何提升设备监控效率?​​
  • Python训练营打卡31
  • 2025华为OD机试真题+全流程解析+备考攻略+经验分享+Java/python/JavaScript/C++/C/GO六种语言最佳实现
  • git 撤销最近的几次push