所以
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,':') )
据我了解您的问题,您有一个开始日期和一个持续时间,以“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 |