繁体   English   中英

如何获得预定的工作时间?

[英]How to get scheduled job time?

我有一个计划的工作,运行时间为12:45:00 AM。 现在通过SP我想得到这个时间。 我在我的SP中运行此查询:

    EXEC msdb.dbo.sp_help_job
    @job_name = N'Daily Trends',
    @job_aspect = N'SCHEDULES' ;

该查询用列显示结果

 active_start_time
    4500

预期输出: 12 : 45 : 00 AM。

您能否建议如何用上午/下午显示时间。

编辑:我从C#代码调用此SP。 如果有人可以建议我如何用C#代码以正确的格式转换时间,也会有所帮助。

因此,要使数据看起来像HH:MM:SS格式,可以使用以下SQL:

SELECT LEFT(RIGHT('0' + Cast(active_start_time AS VARCHAR), 6), 2) 
       + ':' 
       + Substring(RIGHT('0' + Cast(active_start_time AS VARCHAR), 6), 3, 2) 
       + ':' 
       + RIGHT(Cast(active_start_time AS VARCHAR), 2) 
FROM   msdb..sysschedules 

您可以使用sysjobschedules表,但是日期将相同。

该博客应有助于解析日期/时间:

http://blog.sqlauthority.com/2008/12/22/sql-server-find-next-running-time-of-scheduled-job-using-t-sql/

由于时间值似乎存储为带有HHMMSS的小时(HH)可选,所以我认为您需要检查字符串的长度是否为四个字符(或者值是否超过115959,以较快者为准)。 这样的查询应该工作:

SELECT CASE 
         WHEN Len(active_start_time) = 4 THEN Cast( 
         Dateadd(minute, active_start_time / 
                         100, '00:00') AS TIME) 
         ELSE LEFT(RIGHT('0' + Cast(active_start_time AS VARCHAR), 6), 2) 
              + ':' 
              + Substring(RIGHT('0' + Cast(active_start_time AS VARCHAR), 6), 3, 
              2) 
              + ':' 
              + RIGHT(Cast(active_start_time AS VARCHAR), 2) 
       END AS [Start time] 
FROM   msdb..sysschedules 
       INNER JOIN msdb.dbo.sysjobschedules 
               ON msdb.dbo.sysjobschedules.schedule_id = 
                  msdb..sysschedules.schedule_id 
       INNER JOIN msdb.dbo.sysjobs 
               ON msdb.dbo.sysjobs.job_id = msdb.dbo.sysjobschedules.job_id 
WHERE  msdb.dbo.sysjobs.name = 'Daily Trends' 

我没有用那么多的值来测试它,但我相信它应该起作用,或者至少给您提示如何进行操作。 直接访问msdb表可能不是一个好主意,如果我没记错的话,有一些视图可以访问相似的信息,最好使用它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM