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

SQL Server 2017提取JSON列动态子属性值的方法

在SQL Server 2017中解析动态JSON属性的解决方案

嘿,这个场景我之前处理过!针对你描述的需求——把coreTimes下动态变化的属性值逐一拆成单独行,SQL Server 2017里要用**OPENJSON()**函数来实现,它完美适配这种JSON对象的行转列需求。

具体SQL语句

假设你的表是sopinterventionsaux,存储JSON的列是operating_times(和你给出的Oracle示例对应),那么可以这样写:

SELECT res.[value] AS [Column]
FROM sopinterventionsaux
CROSS APPLY OPENJSON(operating_times, '$.coreTimes')
WITH (
    [value] NVARCHAR(MAX) AS JSON
) res;

语句解析

  • OPENJSON(operating_times, '$.coreTimes'):指定要解析的JSON列,以及定位到coreTimes这个固定键下的对象;
  • WITH子句里的[value] NVARCHAR(MAX) AS JSON:关键是加上AS JSON,这样会保留每个子节点的完整JSON格式(比如{"value":1}、{"value":null}),而不是只提取value字段的内容;
  • CROSS APPLY:用来把每个行的JSON展开后的结果和原表关联,确保每行数据都能正确解析。

和Oracle、PostgreSQL写法的对比

这个OPENJSON()的作用和你提到的:

  • Oracle里的JSON_TABLE
  • PostgreSQL里的jsonb_each
    是完全对应的,都是用来将JSON对象的键值对展开为关系型的行数据,适配动态键的场景。

内容的提问来源于stack exchange,提问作者Marco Di Falco

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 08:46:33