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

如何在JSON类型数组中精准提取/查找指定数值?

解决JSON数组中精准查找特定数值的问题

你说得对,用LIKE确实会因为字符串模糊匹配的特性,误匹配到包含目标数字的其他值(比如找4时命中64、1024)。其实很多人不知道,JSON_CONTAINS本身就支持JSON数组的匹配,它并不是只针对JSON对象的!下面分常见数据库给你具体方案:

MySQL 方案

1. 单个值匹配(用JSON_CONTAINS)

如果你的字段是JSON类型(比如名为json_array_col),直接用JSON_CONTAINS就能精准匹配数组中的单个元素:

SELECT * FROM your_table 
WHERE JSON_CONTAINS(json_array_col, '4') -- 匹配数组中的数字4
   OR JSON_CONTAINS(json_array_col, '8'); -- 匹配数组中的数字8

这里要注意:如果数组里的元素是字符串类型(比如["4","8"]),那需要用JSON_QUOTE('4')来生成带引号的JSON字符串进行匹配:

SELECT * FROM your_table 
WHERE JSON_CONTAINS(json_array_col, JSON_QUOTE('4'));

2. 多个值批量匹配(用JSON_OVERLAPS,MySQL 8.0.17+支持)

如果要同时查找4或8,用JSON_OVERLAPS更简洁,它会检查两个JSON数组是否有交集:

SELECT * FROM your_table 
WHERE JSON_OVERLAPS(json_array_col, '[4,8]');

PostgreSQL 方案

PostgreSQL对JSON的支持也很友好,常用两种方式:

1. 用@>操作符(推荐)

如果是json或jsonb类型字段,@>操作符可以检查数组是否包含指定元素:

-- json类型
SELECT * FROM your_table 
WHERE json_array_col @> '[4,8]'::json;

-- jsonb类型(性能更好,推荐存储为jsonb)
SELECT * FROM your_table 
WHERE jsonb_array_col @> '[4,8]'::jsonb;

2. 展开数组筛选

如果需要更灵活的逻辑,可以用json_array_elements把数组展开成行,再筛选:

SELECT DISTINCT t.* FROM your_table t,
json_array_elements(t.json_array_col) AS elem
WHERE elem::integer IN (4,8);

加DISTINCT是为了避免同一行因为数组中有多个匹配元素而重复返回。

核心原理

这些JSON函数/操作符都是解析JSON结构后进行元素匹配,而不是把整个JSON当成字符串做模糊匹配,所以不会出现LIKE那种误匹配的情况,能精准定位数组中的单个元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 04:14:03