如何基于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
相关产品推荐
相关产品推荐

