在SQL Server中根据JSON数组Name的位置获取对应Date和Progress值
在SQL Server中按数组位置匹配JSON多数组元素
可以通过SQL Server的OPENJSON函数解析JSON数组,利用数组元素的索引关联不同数组中对应位置的元素,实现Name、Date、Progress的匹配。
方法一:直接利用OPENJSON默认索引列关联
DECLARE @json NVARCHAR(MAX) = N'{ "Name": ["dokumen_1","dokumen_2","dokumen_3","dokumen_4"], "Date": [0,0,0,0], "Progress": [0,0,0,0] }'; SELECT n.value AS Name, d.value AS Date, p.value AS Progress FROM OPENJSON(@json, '$.Name') n JOIN OPENJSON(@json, '$.Date') d ON n.[key] = d.[key] JOIN OPENJSON(@json, '$.Progress') p ON n.[key] = p.[key];
说明
OPENJSON解析JSON数组时,默认返回三列:
key:数组元素的索引(字符串格式,如"0"、"1")value:数组元素的实际值type:元素的数据类型标识
通过key列作为关联条件,就能把三个数组中同一位置的元素对应起来,得到每个文档对应的Date和Progress值。
方法二:显式定义强类型索引列
如果需要将索引转为整数类型,可通过WITH子句显式声明:
DECLARE @json NVARCHAR(MAX) = N'{ "Name": ["dokumen_1","dokumen_2","dokumen_3","dokumen_4"], "Date": [0,0,0,0], "Progress": [0,0,0,0] }'; SELECT n.Name, d.Date, p.Progress FROM OPENJSON(@json, '$.Name') WITH ( Name NVARCHAR(100) '$', IndexPos INT '$' AS JSON ) n JOIN OPENJSON(@json, '$.Date') WITH ( Date INT '$', IndexPos INT '$' AS JSON ) d ON n.IndexPos = d.IndexPos JOIN OPENJSON(@json, '$.Progress') WITH ( Progress INT '$', IndexPos INT '$' AS JSON ) p ON n.IndexPos = p.IndexPos;
这里通过AS JSON将数组索引转为整数类型的IndexPos列,再以此关联,逻辑和方法一一致,只是索引类型更明确。
内容的提问来源于stack exchange,提问作者Irvan Affandy
相关产品推荐
相关产品推荐

