You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL中如何查询JSON字段包含指定单个或多个数字的行?

问题解答

1. 原有SQL错误修复

你编写的SQL参数使用错误,MySQL JSON_CONTAINS 函数的正确传参顺序为:
JSON_CONTAINS(待查询的JSON字段, 要匹配的JSON值, [查询路径])
你的代码错误将表名test作为第一个参数传入,同时路径参数配置错误。如果participants字段本身是JSON类型的数值数组,正确的单值查询(筛选出participants包含数字2的行)写法如下:

SELECT *
FROM `test`
WHERE JSON_CONTAINS(`participants`, '2', '$');

如果participants是VARCHAR类型存储的JSON字符串,需要先解析为JSON类型再查询:

SELECT *
FROM `test`
WHERE JSON_CONTAINS(JSON_PARSE(`participants`), '2', '$');

2. 多数字查询实现

分为两种常见场景实现:

  • 场景1:只要包含任意一个指定数字即可命中(包含1/2/3/4/5中任意一个即符合条件)
    MySQL 8.0.17及以上版本可以直接使用JSON_OVERLAPS函数判断两个数组是否存在交集:
    SELECT *
    FROM `test`
    WHERE JSON_OVERLAPS(`participants`, '[1,2,3,4,5]');
    
    低版本MySQL可以用多个JSON_CONTAINS加OR拼接实现:
    SELECT *
    FROM `test`
    WHERE JSON_CONTAINS(`participants`, '1', '$')
    OR JSON_CONTAINS(`participants`, '2', '$')
    OR JSON_CONTAINS(`participants`, '3', '$')
    OR JSON_CONTAINS(`participants`, '4', '$')
    OR JSON_CONTAINS(`participants`, '5', '$');
    
  • 场景2:必须同时包含所有指定数字才命中(同时包含1、2、3、4、5才符合条件)
    直接把目标数组作为JSON_CONTAINS的第二个参数传入即可,函数会校验目标数组的所有元素是否都存在于participants数组中:
    SELECT *
    FROM `test`
    WHERE JSON_CONTAINS(`participants`, '[1,2,3,4,5]', '$');
    

内容的提问来源于stack exchange,提问作者teteyi3241

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 20:06:04