在SQL Server中将Varchar值转换为整数/十进制值

时间:2013-04-25 00:35:35

标签: php sql sql-server

如何将数据类型为varchar的表中的记录值转换为integerdecimal,以便我可以得到值的总和。我使用SQL Server 2005

假设我有这样的表结构:

ID int
Stuff varchar

和记录

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

现在我想获得列Stuff的总数:

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

但它不起作用。请帮忙!

4 个答案:

答案 0 :(得分: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

答案 1 :(得分:2)

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

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

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

答案 2 :(得分:1)

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

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

OR

 SELECT SUM(CAST(Stuff AS decimal(6,2))) as result FROM table

答案 3 :(得分: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