我正在嘗試從陣列結構中提取數字,然后我想對它們求和。
示例行條目:
{"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),但不會獲取每個值。知道如何讓這個查詢獲取多個值然后將它們相加嗎?
uj5u.com熱心網友回復:
我個人會將您的資料轉換為實際格式良好的 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呼叫中添加 a ,然后添加 ( ) 值:
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;
uj5u.com熱心網友回復:
該內容幾乎是一個有效的 JSON,因此您可以嘗試修復它并使用內置的 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])
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/422038.html
標籤:
