使用SQL拉取浮点数以求和数组结构中的数据



我试图从数组结构中提取数字,然后求和。

示例行条目:

{"DBA":50.0},{"RST":132.0},{"ZIT":752}

我想对所有数值求和,这样50+132+752=934

我尝试过的:col=列名

SELECT SUBSTRING(col, LEN(LEFT(col, CHARINDEX (':', col))) + 1, LEN(col) - LEN(LEFT(col, 
CHARINDEX (':', col))) - LEN(RIGHT(col, LEN(col) - CHARINDEX ('}', Benefit))) - 1)    
FROM table

在上例中,这可以获取第一个值(因此为50.0(,但不会获取每个值。知道我如何让这个查询获取多个值,然后将它们相加吗?

我个人会将您的数据转换为真正格式良好的JSON。然后你可以很容易地SUM值:

DECLARE @YourString nvarchar(MAX) = N'{"DBA":50.0},{"RST":132.0},{"ZIT":752}';
SELECT SUM(TRY_CONVERT(decimal(5,1),[value]))
FROM (VALUES(CONCAT('{',REPLACE(REPLACE(@YourString,'{',''),'}',''),'}')))V(JSONString)
CROSS APPLY OPENJSON(V.JSONString);

或者,您可以将WITH添加到OPENJSON调用中,然后添加(+(值:

DECLARE @YourString nvarchar(MAX) = N'{"DBA":50.0},{"RST":132.0},{"ZIT":752}';
SELECT OJ.DBA + OJ.RST + OJ.ZIT
FROM (VALUES(CONCAT('{',REPLACE(REPLACE(@YourString,'{',''),'}',''),'}')))V(JSONString)
CROSS APPLY OPENJSON(V.JSONString)
WITH (DBA decimal(5,1),
RST decimal(5,1),
ZIT decimal(5,1)) OJ;

内容几乎是一个有效的JSON,因此您可以尝试修复它,并使用OPENJSON()(有效的JSON内容是[{"DBA":50.0},{"RST":132.0},{"ZIT":752}](通过内置的JSON支持进行解析:

SELECT 
t.[Column],
[Sum] = (
SELECT SUM(CONVERT(numeric(10, 1), j2.value)) 
FROM OPENJSON(CONCAT('[', t.[Column], ']')) j1
CROSS APPLY OPENJSON(j1.[value]) j2
)
FROM (VALUES
('{"DBA":50.0},{"RST":132.0},{"ZIT":752}')
) t ([Column])

最新更新