我的数据库列出了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])))
我很确定有一些东西需要关闭/改变才能使这笔钱工作,但我无法弄清楚是什么!
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]))
)