我必须在列(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'
任何帮助,请
答案 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';