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

时间:2013-12-30 08:58:38

标签: c# sql sql-server-2008

我的预定工作时间是凌晨12:45:00。现在通过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。

您能否建议如何用Am / PM显示时间。

编辑:我从c#代码调用此SP。如果有人可以建议我如何在c#代码中以适当的格式转换时间也会有所帮助。

3 个答案:

答案 0 :(得分:0)

因此,为了使数据看起来像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 

答案 1 :(得分:0)

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

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

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

答案 2 :(得分:0)

由于时间值似乎存储为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表可能是一个坏主意,如果我没记错,有一些视图可以访问类似的信息,最好使用它们。