我在T-SQL中的功能:
sum(ar.tothandlingtime)/(60*60*24)
在我的结果集中我全部为0,因为这一天的这一部分的结果。始终低于0。 我想继续研究结果,因此我需要在表单和视图中获得准确的结果。怎么样?
答案 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
根据我的经验,这通常是在没有明确使用CAST
或CONVERT
的情况下将其注册为十进制除法的最快方法。但是,如果您严格使用基于整数的列值或聚合函数,则需要转换它,就像在第一个示例中一样。
答案 1 :(得分:0)
您正在尝试将其转换为小数。像这样改变
sum(ar.tothandlingtime)/CAST((60*60*24) AS DECIMAL ))