如何将数据类型为varchar
的表中的记录值转换为integer
或decimal
,以便我可以得到值的总和。我使用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
但它不起作用。请帮忙!
答案 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)