在SQL Server中将varchar值转换为整数/小数值

5

如何将数据表中数据类型为 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

但是它不起作用。请帮忙!

你有收到任何错误吗?先尝试不进行聚合运行。 - Jose Areas
仍然不工作。Msg 102,错误:将 varchar 转换为数字数据类型时算术溢出错误。 - Plipus Tel
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


我相信原帖的记录不止那三条。 - codingbiz
我根据用户提供的样本数据进行了测试。 - Hackerman
仍然无法在SQL Server 2005中工作:“将varchar转换为数值数据类型时出现算术溢出错误。” - Plipus Tel
你的某些列是否有“stuff = null”的情况? - Hackerman

2
您遇到了算术溢出的问题。这意味着您试图进行一种不可能完成的转换。当您尝试进行转换时,目标数据类型不足以转换原始数据时,就会抛出此错误。例如:
如果您尝试将100.52转换为decimal(4,2),则会出现此错误。数字100.52需要5个位置,其中2个是小数。
请尝试将小数精度更改为16,2或更高。先尝试几条记录,然后再将其用于所有选择操作。

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

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;

{{链接1:SQLFiddle}}


第一种选项生成错误:操作数数据类型 varchar 对于 sum 运算符无效。 第二种选项生成错误:将数据类型 varchar 转换为数值型时出错。 - Plipus Tel
非常抱歉,因为您标记了“mysql”,所以我在这个测试中使用了它。 - Jon
@PhilipsTel 更新了 SQL Fiddle 并提供了 MS SQL Server 示例。 - Jon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接