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

如何基于JSON格式字段值筛选SQL表中的数据?

嘿,要筛选出my_table里json_field中to_status值为2或3的行,不同数据库的JSON查询语法略有区别,我给你整理几个主流数据库的实现方式:

MySQL(5.7及以上版本)

MySQL从5.7开始支持JSON字段操作,你可以用JSON_EXTRACT函数,或者更简洁的->>运算符(自动去除引号)来提取JSON字段的值,再用IN条件筛选:

-- 写法1:使用JSON_EXTRACT + JSON_UNQUOTE
SELECT * FROM my_table
WHERE JSON_UNQUOTE(JSON_EXTRACT(json_field, '$.to_status')) IN (2, 3);

-- 写法2:更简洁的->>运算符(等价于上面的组合)
SELECT * FROM my_table
WHERE json_field->>'$.to_status' IN (2, 3);

PostgreSQL

PostgreSQL对JSON的支持很完善,你可以通过->>提取字符串形式的值,再转成整数进行匹配;如果是jsonb类型,还可以用@>操作符来匹配JSON对象:

-- 写法1:提取值并转换类型
SELECT * FROM my_table
WHERE (json_field->>'to_status')::INTEGER IN (2, 3);

-- 写法2:针对jsonb类型的匹配(性能更优,建议配合GIN索引)
SELECT * FROM my_table
WHERE json_field @> '{"to_status": 2}' OR json_field @> '{"to_status": 3}';

SQL Server

SQL Server用JSON_VALUE函数来提取JSON字段的值,需要注意的是它默认返回字符串,你可以根据需求转成整数:

-- 写法1:直接匹配字符串形式的数值
SELECT * FROM my_table
WHERE JSON_VALUE(json_field, '$.to_status') IN ('2', '3');

-- 写法2:转换为整数后匹配(更严谨,避免字符串匹配的潜在问题)
SELECT * FROM my_table
WHERE CAST(JSON_VALUE(json_field, '$.to_status') AS INT) IN (2, 3);

小提示:如果你的表数据量很大,建议给JSON字段中常用的查询键建立对应的索引,能大幅提升查询性能哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:40:39