varchar列中的数据总和

时间:2013-08-05 11:00:04

标签: sql sql-server-2008-r2

我必须在列(SCENARIO1)中对varchar进行求和并包含类似(1,920,270.00,0,NULL)的数据但是当我尝试将数据转换为int或decimal时,我得到以下错误: “将值”4582014,00“转换为int type”

时,他的命令错误

这是我的要求:

select sum( convert( int, SCENARIO1) )
from Mnt_Scenario_Exercice where code_pere='00000000'

任何帮助,请

4 个答案:

答案 0 :(得分:3)

试试这个

select sum(cast(replace(SCENARIO1, ',', '.') as decimal(29, 10)))
from Mnt_Scenario_Exercice
where code_pere = '00000000';

如果您无法将'4582014,00'转换为十进制,则您的服务器上可能会有不同的小数点分隔符。您可以查看它是什么,或者只是尝试'.'

答案 1 :(得分:2)

4582014,00应为小数
试试这个(我假设您的查询正在运行)并将convert(int转换为十进制)

  

从Mnt_Scenario_Exercice中选择sum(转换(十进制(20,2),替换(SCENARIO1,',','。'))),其中code_pere =' 00000000'

答案 2 :(得分:1)

问题是由于sum函数没有将SCENARIO1解码为包含CSV数字列表。 sum函数通常用于汇总从多行中抽取的大量数字,其中每行提供一个数字。

尝试分两步完成。在步骤1中,可能通过UNPIVOTING将表转换为第一范式。 1NF表每行将有一个数字,并且将包含比初始表更多的行。

第二步是计算总和。如果要在结果中使用多个总和,请使用GROUP BY创建组,然后选择总和(somecolumn)。这将为每个组产生一笔金额。

答案 3 :(得分:0)

试试这个,我还没有办法测试,但是如果不正确我会测试和替换。

SELECT sum(CAST (replace(SCENARIO1, ',', '') AS INT))
FROM   Mnt_Scenario_Exercice
WHERE  code_pere = '00000000';

编辑:如果您需要4582014,00为4582014.00,您可以使用numeric

SELECT sum(CAST (replace(SCENARIO1, ',', '.') AS NUMERIC(10,2)))
    FROM   Mnt_Scenario_Exercice
    WHERE  code_pere = '00000000';