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
相关产品推荐
相关产品推荐

