为什么我的操作结果向下舍入为0?

时间:2014-08-01 12:28:58

标签: sql-server tsql

我在T-SQL中的功能:

sum(ar.tothandlingtime)/(60*60*24)

在我的结果集中我全部为0,因为这一天的这一部分的结果。始终低于0。 我想继续研究结果,因此我需要在表单和视图中获得准确的结果。怎么样?

2 个答案:

答案 0 :(得分:1)

正在执行integer division,从而截断小数。

要获得所需的结果,请尝试将一侧转换为decimal

CONVERT(decimal(19, 18), SUM(ar.tothandlingtime))/(60*60*24)

使用它可以让SQL知道执行基于十进制的除法。

如果需要,您还可以使用小数的精度和小数位数(在此处阅读更多内容:http://msdn.microsoft.com/en-us/library/ms187746.aspx

当然,如果您不关心精度,您也可以通过在每个硬编码后加.0来实现这一目标:

(60.0*60.0*24.0)

例如,

select 5/(60.0*60.0*24.0) -- Result: 0.000057870370 
select 5/(60*60*24) -- Result: 0

根据我的经验,这通常是在没有明确使用CASTCONVERT的情况下将其注册为十进制除法的最快方法。但是,如果您严格使用基于整数的列值或聚合函数,则需要转换它,就像在第一个示例中一样。

答案 1 :(得分:0)

您正在尝试将其转换为小数。像这样改变

sum(ar.tothandlingtime)/CAST((60*60*24) AS DECIMAL ))