如何使用OPENJSON筛选数据库表中qty小于10的记录
筛选JSON字段中qty小于10的SQL语句修改方案
原表结构及数据
数据库表中Details字段为JSON格式,表结构和数据如下:
| Id | Details | Price |
|---|---|---|
| 1 | {"partNumber":"012345","qty":14} | 14.99 |
| 2 | {"partNumber":"22222","qty":11} | 4.88 |
| 3 | {"partNumber":"44444","qty":1} | 3.24 |
| 4 | {"partNumber":"72431223","qty":9} | 3.33 |
| 5 | {"partNumber":"98989","qty":1} | 3.33 |
原有筛选qty等于1的SQL语句
select * from tableName where ('1') IN (select qty from OPENJSON(tableName.Details) WITH ( [qty] NVARCHAR(20) '$.qty'))
修改后筛选qty小于10的SQL语句
要筛选qty小于10的记录(返回Id为3、4、5的条目),可以直接通过OPENJSON解析后做数值比较,推荐两种严谨的写法:
写法一:解析后转换数值类型
select * from tableName where (select CAST(qty AS INT) from OPENJSON(tableName.Details) WITH ( [qty] NVARCHAR(20) '$.qty')) < 10
写法二:解析时直接指定数值类型(更高效)
select * from tableName where (select qty from OPENJSON(tableName.Details) WITH ( [qty] INT '$.qty')) < 10
两种写法都能正确筛选出目标记录,第二种写法在JSON解析阶段就将qty定义为INT类型,避免了字符串比较的潜在问题,执行效率更高。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

