SQL Server 2016解析含不规则顺序元素的JSON列,获取指定字段值问题
SQL Server 2016解析含不规则顺序元素的JSON列,获取指定字段值问题
我太懂你这个烦恼了!当JSON数组里的元素顺序不固定时,用固定索引$[0]去取值肯定会踩坑——毕竟你没法保证SourceSystem每次都乖乖排在第一位对吧?
针对SQL Server 2016的版本,你可以用OPENJSON配合CROSS APPLY来解决这个问题,它能把JSON数组拆成关系型的行数据,然后我们可以通过Name字段精准筛选出想要的SourceSystem对应值。
直接上可用的SQL语句:
SELECT TOP 2 j.Value AS SourceSystem FROM RequestDetail CROSS APPLY OPENJSON(RequestData) WITH ( Name NVARCHAR(100) '$.Name', Value NVARCHAR(100) '$.Value' ) j WHERE j.Name = 'SourceSystem'
给你拆解一下这个语句的逻辑:
OPENJSON(RequestData)会把每一行的JSON数组拆分成独立的行,每一行对应数组里的一个{Name:..., Value:...}对象WITH子句用来把JSON对象里的Name和Value字段映射成普通的SQL列,方便后续操作CROSS APPLY会把拆分后的行和原表的行关联起来- 最后通过
WHERE j.Name = 'SourceSystem'筛选出我们需要的记录,不管它在数组里的位置是第几个,都能准确拿到对应的Value
之前你尝试的JSON_QUERY之所以没成功,是因为它的作用是返回完整的JSON对象或数组,而不是提取单个标量值,所以在这里用OPENJSON的方式更合适。
用你提供的测试数据跑这个语句,就能得到正确的结果:SSValue和SSVALUE2啦!
备注:内容来源于stack exchange,提问作者IrfanClemson
相关产品推荐
相关产品推荐

