问题描述
我有一个 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,',');