在SELECT语句中使用OPENJSON提取JSON字段的技术咨询
提取JSON字段并筛选数据的SQL解决方案
你的表结构及数据如下:
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
需求是返回partNumber和Price字段,筛选Price < 10.00的数据。你之前尝试的SQL语法有误,以下是两种可行的解决方案:
方案一:用JSON_VALUE直接提取单个字段
这种方法简单直接,适合只需要提取少量JSON属性的场景:
SELECT JSON_VALUE(Details, '$.partNumber') AS partNumber, Price FROM tableName WHERE Price < 10.00
JSON_VALUE函数通过JSON路径$.partNumber直接从Details字段中取出partNumber的值。
方案二:用OPENJSON解析JSON(适合多字段提取)
如果需要从JSON中提取多个属性,用OPENJSON结合CROSS APPLY更灵活:
SELECT j.partNumber, t.Price FROM tableName t CROSS APPLY OPENJSON(t.Details) WITH ( partNumber NVARCHAR(50) '$.partNumber' ) j WHERE t.Price < 10.00
这里用CROSS APPLY把JSON字符串解析成结构化的行集,WITH子句定义要提取的字段名、类型和对应的JSON路径。
你之前的SQL错误在于FROM子句的写法,不能直接在表名后嵌套子查询,必须用APPLY类操作符关联OPENJSON的解析结果。
内容的提问来源于stack exchange,提问作者John
相关产品推荐
相关产品推荐

