如何使用SQL查询统计JSON类型字段中指定属性的匹配行数
不同数据库环境下的实现方案
以下是主流数据库针对该需求的实现语法,可直接根据你使用的数据库类型选择对应方案:
MySQL 5.7+ 版本
MySQL 提供JSON_EXTRACT函数提取JSON字段属性,也可使用简化操作符:
-- 写法1:使用JSON_EXTRACT函数 SELECT COUNT(*) AS success_order_count FROM 你的表名 WHERE JSON_UNQUOTE(JSON_EXTRACT(LogDetails, '$.ORDER_STATUS')) = 'SUCCESS'; -- 写法2:使用->>简化操作符(自动去外层双引号) SELECT COUNT(*) AS success_order_count FROM 你的表名 WHERE LogDetails->>'$.ORDER_STATUS' = 'SUCCESS';
PostgreSQL 版本
PostgreSQL 用->>操作符直接提取JSON字段的文本值,JSON和JSONB类型通用:
SELECT COUNT(*) AS success_order_count FROM 你的表名 WHERE LogDetails->>'ORDER_STATUS' = 'SUCCESS';
SQL Server 2016+ 版本
SQL Server 使用JSON_VALUE函数提取JSON属性:
SELECT COUNT(*) AS success_order_count FROM 你的表名 WHERE JSON_VALUE(LogDetails, '$.ORDER_STATUS') = 'SUCCESS';
Oracle 12c R1+ 版本
Oracle 同样支持JSON_VALUE函数实现该需求:
SELECT COUNT(*) AS success_order_count FROM 你的表名 WHERE JSON_VALUE(LogDetails, '$.ORDER_STATUS') = 'SUCCESS';
注意事项
- 请把上述SQL中的
你的表名替换为实际业务中的表名 - 若
LogDetails字段为字符串类型而非原生JSON类型,需要先完成类型转换再提取属性,例如PostgreSQL环境可写为LogDetails::json->>'ORDER_STATUS' - 部分数据库提取JSON字符串属性时会自带外层双引号,遇到匹配不到的情况可以先检查提取出来的属性值格式是否符合预期
内容的提问来源于stack exchange,提问作者rahul.cs
相关产品推荐
相关产品推荐

