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

MySQL如何查询JSON数组字段包含任意指定多个值的记录

问题原因

你原有查询不生效的核心原因是 JSON_EXTRACT(data, '$[*]') 返回的是完整的JSON数组而非拆分后的单个元素,JSON_UNQUOTE 处理后得到的是拼接好的整串,和 IN 子句中的单个日期值完全无法匹配。

解决方案

方案1:兼容MySQL 5.7及以上版本

使用JSON_SEARCH函数实现匹配,第二个参数'one'代表只要找到任意一个匹配值就返回,刚好满足“至少包含一个目标日期”的需求:

SELECT * FROM test
WHERE JSON_SEARCH(data, 'one', 'Monday') IS NOT NULL 
   OR JSON_SEARCH(data, 'one', 'Tuesday') IS NOT NULL;

方案2:MySQL 8.0.17及以上版本(更简洁)

可以直接使用JSON_OVERLAPS函数判断两个JSON数组是否存在公共元素:

SELECT * FROM test
WHERE JSON_OVERLAPS(data, '["Monday", "Tuesday"]');
补充说明

你的data字段定义为VARCHAR类型而非JSON类型,MySQL的JSON函数会自动做隐式类型转换,如果要规避潜在的格式校验问题,可以显式转换字段类型:

SELECT * FROM test
WHERE JSON_OVERLAPS(CAST(data AS JSON), '["Monday", "Tuesday"]');

如果你期望返回test1和test2两条记录,只需要把Friday也加入目标匹配列表即可:

SELECT * FROM test
WHERE JSON_OVERLAPS(data, '["Monday", "Tuesday", "Friday"]');

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 13:09:00