日期:2014-05-18  浏览次数:20659 次

有关字段累加
我现在有一个字段,数据类型是varchar(255),内容是 '82,65,32,98 ',也就是说,这个字段里面的数字是用 ", "隔开的,现在我想把这里面的数字取出来,并累加,想要得到它的累加值结果为 "277 ",不知该如何实现?

------解决方案--------------------
create table temp(aaa varchar(20))
declare @strsql as varchar(8000)
select @strsql= ' '
select @strsql= 'insert into temp values( ' ' '+replace( '82,65,32,98 ', ', ', ' ' ') insert into temp values ( ' ' ')+ ' ' ') '
exec (@strsql)
select sum(cast(aaa as int)) from temp
drop table temp

--结果
/*
277
*/
------解决方案--------------------
DECLARE @str varchar(1000)
SET @str = '82,65,32,98 '

DECLARE @re int
DECLARE @s nvarchar(4000)
SET @s = 'SET @re= ' + REPLACE(@str, ', ', '+ ')
EXEC sp_executesql @s, N '@re int OUT ', @re OUT
SELECT @re
------解决方案--------------------
--建立测试数据
CREATE TABLE A(id INT,string VARCHAR(100))
INSERT A
SELECT 1, '82,65,32,98 ' UNION ALL
SELECT 2, '10,20,30,40 '

SELECT * FROM A

--建立辅助临时表
SELECT TOP 8000 id = identity(int,1,1)
INTO #1 FROM syscolumns a, syscolumns b

--执行查询
SELECT A.ID, Num = CAST(SUBSTRING(A.string, B.ID, CHARINDEX( ', ', A.string + ', ', B.ID) - B.ID) AS INT)
INTO #2
FROM A, #1 B
WHERE SUBSTRING( ', ' + a.string, B.id, 1) = ', '
GO

SELECT ID,Total=SUM(CAST(Num AS INT))
FROM #2
GROUP BY ID

--删除测试环境
DROP TABLE A,#1,#2

--查看结果
/*
id string
1 82,65,32,98
2 10,20,30,40

ID Total
1 277
2 100
*/