计算基于纪元的经过的时间百分比

时间:2018-06-05 10:33:30

标签: sql sql-server

我的数据库列出了SQL服务器作业,它们的开始时间和平均持续时间。我的开始时间和ETA结束时间显示为Epoch目前:

DATEDIFF(SECOND, CONVERT(date, DATEADD(minute,AVG(datediff(minute, p3.[Started], p3.Finished)),MAX(p3.[Started]))),  DATEADD(minute,AVG(datediff(minute, p3.[Started], p3.Finished)),MAX(p3.[Started]))) [ETAEpoch],
DATEDIFF(SECOND, CONVERT(date, GETDATE()), GETDATE()) [CurrentEpoch]

但是,我想以百分比的形式确定工作完成的程度。简单的数学表明我将当前时间除以ETA结束时间乘以100得到这个。 计算它会给出一个准确的数字,但是当我执行它时SSMS显示为“0”:

DATEDIFF(SECOND, CONVERT(date, GETDATE()), GETDATE())
       /
       DATEDIFF(SECOND, CONVERT(date, DATEADD(minute,AVG(datediff(minute, p3.[Started], p3.Finished)),MAX(p3.[Started]))),  DATEADD(minute,AVG(datediff(minute, p3.[Started], p3.Finished)),MAX(p3.[Started])))

我很确定有一些东西需要关闭/改变才能使这笔钱能够运作但我无法弄清楚是什么!

1 个答案:

答案 0 :(得分:5)

SQL Server执行整数除法。所以,1/2是0而不是0.5。因此,您需要转换为具有小数位的格式。我经常通过乘以1.0

来做到这一点
(DATEDIFF(SECOND, CONVERT(date, GETDATE()), GETDATE()) * 1.0 /
 DATEDIFF(SECOND, CONVERT(date, DATEADD(minute,AVG(datediff(minute, p3.[Started], p3.Finished)),MAX(p3.[Started]))),  DATEADD(minute,AVG(datediff(minute, p3.[Started], p3.Finished)),MAX(p3.[Started]))
)