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