计算工作完成时间

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

所以

msdb.dbo.sysjobhistory
有开始时间和一些整数,你可以从中计算结束时间

SELECT CONVERT(datetime, msdb.dbo.agent_datetime(run_date, run_time))+
        CONVERT(datetime, STUFF(STUFF(RIGHT('000000' + CAST ( run_duration AS VARCHAR(6 ) ) ,6),5,0,':'),3,0,':') ) As JobFinishTime
 FROM  msdb.dbo.sysjobs j  
 INNER JOIN msdb.dbo.sysjobhistory h ON j.job_id = h.job_id  
 where h.step_id = 0 AND h.run_status=1 AND j.enabled = 1  
 AND  j.enabled = 1

所以我的一项工作的 run_duration 值为 250910,即 25 小时 9 分 10 秒。显然转换失败,因为它超过了 24 小时。当 run_duration 的值为 250910

时,你能帮我修复上面的查询吗

以此为参考,给run_date和run_time填上一些值

select CONVERT(datetime, msdb.dbo.agent_datetime(20230411, 70358))+
        CONVERT(datetime, STUFF(STUFF(RIGHT('000000' + CAST ( 250910 AS VARCHAR(6 ) ) ,6),5,0,':'),3,0,':') ) 
sql sql-server date-arithmetic
1个回答
0
投票

据我了解您的问题,您有一个开始日期和一个持续时间,以“HHMMSS”格式的字符串表示,您希望从中得出结束日期。一种方法是使用字符串函数来分隔小时、分钟和秒,将整个事情转换为秒数,然后用

dateadd()
偏移开始日期。

假设您在

jobStartTime
列中有开始日期,在
runDuration
中有持续时间,您可以这样表达:

dateadd(
    second, 
    left(runDuration, 2) * 60 * 60 + substring(runDuration, 3, 2) * 60 + right(runDuration, 2),
    jobStartTime
) JobFinishTime

这是一个人为的例子:

select x.*, 
    dateadd(
        second, 
        left(duration, 2) * 60 * 60 + substring(duration, 3, 2) * 60 + right(duration, 2),
        startdt
    ) enddt
from ( values (getdate(), '250910')) as x(startdt, duration)
开始 持续时间 结束
2023-05-02 13:34:12.203 250910 2023-05-03 14:43:22.203

小提琴

© www.soinside.com 2019 - 2024. All rights reserved.