1

我必须对列 (SCENARIO1) 中的元素求和,该列是 varchar 并包含 (1,920, 270.00, 0, NULL) 之类的数据,但是当我尝试将数据转换为 int 或 decimal 时出现此错误:“转换时他的命令错误值 "4582014,00" 为 int 类型"

这是我的要求:

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

请有任何帮助

4

4 回答 4

3

尝试这个

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

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

于 2013-08-05T11:11:52.743 回答
2

4582014,00 应该是小数
试试这个(我假设你的查询正在工作)并更改转换(int 成十进制)

选择 sum(convert(decimal(20,2),replace(SCENARIO1, ',', '.'))) 从 Mnt_Scenario_Exercice where code_pere='00000000'

于 2013-08-05T11:01:54.147 回答
1

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

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

第二步是计算总和。如果您希望结果中有多个总和,请使用 GROUP BY 创建组,然后选择一个总和(某个列)。这将为每组产生一个总和。

于 2013-08-05T11:27:54.987 回答
0

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

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

编辑:numeric如果您需要 4582014,00 为 4582014.00,则可以使用 a 作为演员表

SELECT sum(CAST (replace(SCENARIO1, ',', '.') AS NUMERIC(10,2)))
    FROM   Mnt_Scenario_Exercice
    WHERE  code_pere = '00000000';
于 2013-08-05T11:05:21.370 回答