SQL Server 2017中如何用JSON_VALUE查询JSON列所有Comment值?
解决SQL Server 2017遍历JSON数组所有Comment的查询问题
你原来的写法通过硬编码数组索引([0]、[1])只能匹配前两个元素,要遍历Items数组里的所有Comment,可以用SQL Server的OPENJSON函数展开JSON数组,下面是两种常用方案:
方案一:查询所有包含符合条件Comment的发票记录
如果只需找出存在任意一个Comment包含指定内容的发票,用EXISTS子句结合OPENJSON:
SELECT i.* FROM invoices i WHERE EXISTS ( SELECT 1 FROM OPENJSON(i.raw_data, '$.Items') WITH ( Comment NVARCHAR(MAX) '$.Comment' ) AS items WHERE items.Comment LIKE '%9644676%' )
OPENJSON会把raw_data中的Items数组拆分为多行记录,每条记录对应一个Item元素;通过WITH子句提取出Comment字段后,EXISTS会判断该发票是否存在符合模糊匹配条件的Comment,不管数组里有多少个元素都能覆盖到。
方案二:展示所有匹配的Comment及对应发票信息
如果需要把每个符合条件的Comment和对应的发票信息一起返回,用CROSS APPLY关联OPENJSON的结果:
SELECT i.*, items.Comment FROM invoices i CROSS APPLY OPENJSON(i.raw_data, '$.Items') WITH ( Comment NVARCHAR(MAX) '$.Comment' ) AS items WHERE items.Comment LIKE '%9644676%'
这种写法会将每个符合条件的Comment拆分为单独的行,比如某张发票有3个符合条件的Comment,就会返回3条该发票的记录,每条对应一个匹配的Comment。
内容的提问来源于stack exchange,提问作者James
相关产品推荐
相关产品推荐

