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

Pulling floats to sum data in array structure using 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,因此您可以尝试修复它并使用 built-in JSON 支持使用 OPENJSON()(有效的 JSON内容为[{"DBA":50.0},{"RST":132.0},{"ZIT":752}]):

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])