5

如何将具有数据类型的表中记录的值转换varcharinteger或者decimal我可以获得值的总和。我用SQL Server 2005.

假设我有这样的表结构:

ID int
Stuff varchar

和记录

ID = 1, Stuff = 32.43
ID = 2, Stuff = 43.33
ID = 3, Stuff = 23.22

现在我想得到列东西的总数:

SELECT SUM(convert(decimal(4,2), Stuff)) as result FROM table

但它不起作用。请需要帮助!

4

4 回答 4

8

表结构......非常基本:

create table tabla(ID int, Stuff varchar (50));

insert into tabla values(1, '32.43');
insert into tabla values(2, '43.33');
insert into tabla values(3, '23.22');

询问:

SELECT SUM(cast(Stuff as decimal(4,2))) as result FROM tabla

或者,试试这个:

SELECT SUM(cast(isnull(Stuff,0) as decimal(12,2))) as result FROM tabla

使用 SQLServer 2008

于 2013-04-25T00:55:35.397 回答
2

你得到算术溢出。这意味着您正在尝试使转换无法进行。当您尝试进行转换并且命运数据类型不足以转换原始数据时,将引发此错误。例如:

如果您尝试将 100.52 转换为 decimal(4,2),您将收到此错误。数字 100.52 需要 5 个位置,其中 2 个是十进制的。

尝试将小数精度更改为 16,2 或更高。先尝试几条记录,然后将其用于所有选择。

于 2013-04-25T01:30:01.663 回答
1

原因可能是总和超过了所需的位数 - 4。如果将小数的大小增加到decimal(10,2),它应该可以工作

 SELECT SUM(convert(decimal(10,2), Stuff)) as result FROM table

或者

 SELECT SUM(CAST(Stuff AS decimal(6,2))) as result FROM table
于 2013-04-25T00:54:39.137 回答
0

您可以在不强制转换的情况下使用它,例如:

select sum(`stuff`) as mySum from test;

或将其转换为十进制:

select sum(cast(`stuff` as decimal(4,2))) as mySum from test;

SQLFiddle

编辑

对于 SQL Server,您可以使用:

select sum(cast(stuff as decimal(5,2))) as mySum from test;

SQLFiddle

于 2013-04-25T00:44:58.377 回答