我的预定工作时间是凌晨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#代码中以适当的格式转换时间也会有所帮助。
答案 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表,但日期将相同。
此博客应该有助于解析日期/时间:
答案 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
表可能是一个坏主意,如果我没记错,有一些视图可以访问类似的信息,最好使用它们。