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

如何在SQL Server列的JSON集合中提取指定属性?

解决SQL Server JSON数组提取特定字段的问题

核心方案:用OPENJSON()拆解数组

JSON_VALUE仅适用于单个JSON对象,处理数组时需要借助OPENJSON()将数组拆分为行集,再逐个提取目标字段。

示例查询代码

假设你的表名为YourTable,执行以下SQL即可得到Id与对应name的一一对应结果:

SELECT 
    t.Id,
    JSON_VALUE(j.value, '$.name') AS Name
FROM 
    YourTable t
CROSS APPLY 
    OPENJSON(t.ItemDetails) j

代码说明

  • CROSS APPLY:将原表每行数据与OPENJSON()生成的行集关联,把每个JSON数组中的对象拆分为独立行。
  • OPENJSON(t.ItemDetails):把ItemDetails列的JSON数组转换为包含value列的行集,每个value对应数组中的一个JSON对象。
  • JSON_VALUE(j.value, '$.name'):从拆分后的单个JSON对象中提取name字段的值。

测试验证

若表中存在如下数据:

IdItemDetails
1[{"name":"张三","age":25,"gender":"男"},{"name":"李四","age":30,"gender":"女"}]
2[{"name":"王五","age":28,"gender":"男"}]

执行查询后会得到结果:

IdName
1张三
1李四
2王五

额外处理:过滤非法JSON

如果存在格式不合法的JSON数据,可添加ISJSON()过滤:

SELECT 
    t.Id,
    JSON_VALUE(j.value, '$.name') AS Name
FROM 
    YourTable t
CROSS APPLY 
    OPENJSON(t.ItemDetails) j
WHERE 
    ISJSON(t.ItemDetails) = 1

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 22:27:05