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

SQL中如何提取嵌套JSON内部数组里的指定JSON字段值

可以直接高效提取Chronic作为独立列,根据你的使用场景可选择以下两种方案:

方案1:仅提取Results数组第一个元素的Chronic值

如果你的业务逻辑固定只取数组下标为0的元素,直接用JSON_VALUE函数指定嵌套路径即可:

SELECT DISTINCT
    -- 直接提取第一个元素的Chronic值,可根据需要转成对应数值类型
    CAST(JSON_VALUE(mdj.value, '$.Results[0].Chronic') AS INT) AS Chronic,
    -- 也可同步提取Probability字段
    CAST(JSON_VALUE(mdj.value, '$.Results[0].Probability') AS FLOAT) AS Probability
FROM table1 t1
JOIN table2 t2 ON t2.parameter1 = t1.parameter1
    AND t2.parameter2 = 'ASDF'
-- 注意:原查询此处关联条件存在笔误,oad/oa别名未定义,请修正为实际关联字段
JOIN table3 t3 ON t3.parameter3 = t1.parameter3 
    AND t3.parameter4 = 11
CROSS APPLY OPENJSON(t3.MetaDataJSON) as mdj

方案2:展开Results数组提取所有元素的Chronic值

如果需要把Results数组内的所有JSON对象都拆成独立行,推荐使用带WITH子句的OPENJSON解析,一次性提取所需字段,性能最优:

SELECT DISTINCT
    res.Chronic,
    res.Probability
FROM table1 t1
JOIN table2 t2 ON t2.parameter1 = t1.parameter1
    AND t2.parameter2 = 'ASDF'
JOIN table3 t3 ON t3.parameter3 = t1.parameter3 
    AND t3.parameter4 = 11
CROSS APPLY OPENJSON(t3.MetaDataJSON) as mdj
-- 解析Results数组,直接映射为结构化字段
CROSS APPLY OPENJSON(mdj.value, '$.Results')
WITH (
    Chronic INT '$.Chronic',
    Probability FLOAT '$.Probability'
) AS res

性能说明

带WITH子句的OPENJSON仅需一次解析就能提取所有指定字段,避免重复调用JSON解析函数,数据量越大相比多次调用JSON_VALUE的性能优势越明显。


内容的提问来源于stack exchange,提问作者Robert Harris

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.10 09:21:03