You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

在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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 00:20:44