如何在没有行数据的情况下将varchar转换为十进制

时间:2010-12-06 09:26:51

标签: sql tsql

我有一个t-sql语句,通过将varchar值转换为小数来汇总它们。如果不存在值,则返回0.

我收到的错误是“将数据类型varchar转换为数字时出错”。如果没有返回结果数据 ,则只会出现

select sum(convert(decimal(28,8), isnull(myColumn, 0)))
from myTable
//...multiple inner joins
//...and multiple filter criteria

由于没有数据,我想到的解决方法是执行select计数以检测是否存在任何行,然后执行以下语句。有没有更好的解决方案?

5 个答案:

答案 0 :(得分:2)

当没有数据存在时,以下所有答案都不起作用。除了执行if存在之外,找不到任何其他方法。

这是更大的sql脚本的一部分,这个特定的部分是更新临时表。

if exists(select * from table inner join...where...)
being
    select sum(convert(decimal(28,8), isnull(myColumn, 0)))
    from myTable
    ...inner joins
    ...where clause
end

<强>更新

错误的实际原因是因为where子句发生转换,并且在运行where子句之前的连接上发生错误。内连接返回空值。

答案 1 :(得分:1)

你的isnull在错误的地方。

sum(convert(decimal(28,8),isnull(myColumn,0)))

将空值转换为0然后转换为十进制,然后最后求和。

答案 2 :(得分:0)

sum(convert(decimal(28,8), isnull(myColumn,'0'))

答案 3 :(得分:0)

仅仅为了记录,有些人更喜欢COALESCE:

sum(convert(decimal(28,8), COALESCE(myColumn,'0'))

答案 4 :(得分:0)

我希望此查询可以帮助您

select isnull(sum(convert(decimal(28,8),isnull(myColumn,0))), 0)
from myTable