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

问题描述 投票:3回答:1

我的数据库列出了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 sql-server
1个回答
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]))
)
© www.soinside.com 2019 - 2024. All rights reserved.