数据库中有一列包含逗号分隔值,如:0.0012.45,14.33等。
我需要在存储过程中对其求和。我能想到的一种方法是使用函数将其拆分并转换为表,然后对其求和。
还有其他想法吗?
发布于 2010-04-11 23:44:56
使用Sql Server 2005+ CTE可以创建递归select,如下所示
DECLARE @Table TABLE(
ID INT,
Vals VARCHAR(100)
)
INSERT INTO @Table SELECT 1, '0.00,12.45,14.33'
INSERT INTO @Table SELECT 2, '1,2,3,4'
;WITH ValList AS(
SELECT ID,
CAST(LEFT(Vals,PATINDEX('%,%', Vals) - 1) AS FLOAT) Val,
RIGHT(Vals,LEN(Vals) - PATINDEX('%,%', Vals)) Remainder
FROM @Table
UNION ALL
SELECT ID,
CAST(LEFT(Remainder,CASE WHEN PATINDEX('%,%', Remainder) = 0 THEN LEN(Remainder) ELSE PATINDEX('%,%', Remainder) - 1 END) AS FLOAT) Val,
RIGHT(Remainder,CASE WHEN PATINDEX('%,%', Remainder) = 0 THEN 0 ELSE LEN(Remainder) - PATINDEX('%,%', Remainder) END) Remainder
FROM ValList
WHERE LEN(Remainder) > 0
)
SELECT ID,
SUM(Val)
FROM ValList
GROUP BY ID输出
ID Total
----------- ----------------------
1 26.78
2 10发布于 2010-04-11 23:43:59
在一个函数中,你可以尝试这样的东西,完全不确定它是否会工作!
CREATE FUNCTION ufn_sum_csv(@string varchar(100))
RETURNS @result int
AS BEGIN
EXEC 'SELECT @result = ' + REPLACE(@string,',','+')
RETURN不能在这台电脑上试用。
https://stackoverflow.com/questions/2617538
复制相似问题