如何在 SQL Sever 中获取 CSV 中所有值的 SUM?

问题描述

我有一个 CSV,我想获取其中所有值的总和,但找不到好的解决方案。

我想尝试像下面这样的 STRING_SPLIT,但它需要 compatibility level 130,而我的 sql Server 是 120。我无法更改兼容性级别。

DECLARE @csv VARCHAR(MAX) = '1,2,3,4,5';
SELECT SUM(*) FROM STRING_SPLIT(@csv,','); --It should return 15

sql Server 详细信息:

Microsoft sql Server 2019 (RTM-CU9) (KB5000642) - 15.0.4102.2 (X64)
2021 年 1 月 25 日 20:16:12 版权所有 (C) 2019 Microsoft Corporation Windows Server 2019 Datacenter 10.0 上的开发人员版(64 位) (内部版本 17763:)(管理程序)

解决方法

功能:

CREATE FUNCTION [dbo].[STRING_SPLIT]
(
    @string VARCHAR(MAX),@separator VARCHAR
)
RETURNS @returnList TABLE ([value] INT) 
AS
BEGIN
    DECLARE @location INT
    WHILE (CHARINDEX(@separator,@string,0) > 0)
    BEGIN
            SET @location =   CHARINDEX(@separator,0) 
            
            INSERT INTO   @returnList
            SELECT CAST(RTRIM(LTRIM(SUBSTRING(@string,@location))) AS INT)

            SET @string = STUFF(@string,1,@location,'') 
    END
    INSERT INTO @returnList
    SELECT CAST(RTRIM(LTRIM(@string)) AS INT)
    RETURN
END

使用:

DECLARE @csv VARCHAR(MAX) = '1,2,3,4,5';
SELECT SUM(value) FROM dbo.STRING_SPLIT(@csv,',');