SQL Server中将表内JSON格式单列拆分为多列的问题咨询
SQL Server JSON列拆分解决方案
适用版本
仅支持SQL Server 2016及以上版本,该范围版本原生内置JSON解析相关函数
方案1:JSON_VALUE 直接取值(适合简单JSON结构)
直接通过JSON路径提取对应字段值,示例代码如下,请将代码中的YourTableName替换为实际表名,JsonColumn替换为存储JSON数据的实际列名:
-- 若列中存储的是未转义的原生JSON,直接使用该语句 SELECT JSON_VALUE(JsonColumn, '$.Date') AS Date, CAST(JSON_VALUE(JsonColumn, '$.Value') AS DECIMAL(18,1)) AS Value FROM YourTableName;
方案2:OPENJSON 批量解析(适合多字段、复杂JSON结构)
通过OPENJSON将JSON字段直接映射为表列,多字段查询时效率更高:
SELECT j.Date, CAST(j.Value AS DECIMAL(18,1)) AS Value FROM YourTableName t CROSS APPLY OPENJSON(t.JsonColumn) WITH ( Date VARCHAR(10) '$.Date', Value DECIMAL(20,10) '$.Value' ) j
特殊场景处理:JSON存在HTML转义
如果你的列存储的是转义后的JSON(即双引号被转义为",和你给出的取值示例一致),需要先替换转义字符再解析:
SELECT JSON_VALUE(REPLACE(JsonColumn, '"', '"'), '$.Date') AS Date, CAST(JSON_VALUE(REPLACE(JsonColumn, '"', '"'), '$.Value') AS DECIMAL(18,1)) AS Value FROM YourTableName;
内容的提问来源于stack exchange,提问作者Shalini Samipillai
相关产品推荐
相关产品推荐

