我有我正在写入存储过程的代码:
declare @StartTime time
declare @EndTime time
declare @Temp_StartTime time
declare @temp_StartHour int
declare @temp_EndHour int
declare @temp_StartMinute int
declare @temp_EndMinute int
SET @StartTime='22:30:00'
SET @EndTime='00:52:00'
SET @Temp_StartTime=@StartTime
SET @temp_StartHour=DATEPART(HOUR, @StartTime)
SET @temp_EndHour=DATEPART(HOUR, @EndTime)
SET @temp_StartMinute=DATEPART(MI, @StartTime)
SET @temp_EndMinute=DATEPART(MI, @EndTime)
if(@temp_EndMinute>0)
BEGIN
SET @temp_EndHour=@temp_EndHour+1
END
DECLARE @Temp_Table TABLE
(
StartHour int,
StartMinute int,
EndHour int,
EndMinute int,
StartTime time,
EndTime time
)
WHile((@temp_EndHour-@temp_StartHour>=1))
BEGIN
INSERT INTO @Temp_Table
SELECT (DATEPART(HOUR, @Temp_StartTime)) AS StartHour,(DATEPART(MINUTE, @Temp_StartTime)) AS StartMinute,
@temp_StartHour+1 AS EndHour,
0 AS EndMinute, @StartTime as StartTime, @EndTime as EndTime
SET @temp_StartHour=@temp_StartHour+1
SET @Temp_StartTime=DATEADD(HOUR,1,@Temp_StartTime)
if(DATEPART(MI, @Temp_StartTime)!=0)
BEGIN
SET @Temp_StartTime=DATEADD(MI,-@temp_StartMinute,@Temp_StartTime)
END
END
SELECT * FROM @Temp_Table
如果您使用除我在上面的 00:52:00 示例之外的任何时间值,它会非常有用。例如,如果 EndTime 是 23:05,则存储过程运行良好。我对 DATEPART 进行了一些研究,但没有发现任何有用的信息来帮助它正确计算军用时间的午夜。
编辑:当代码正常运行时,它会计算开始时间和结束时间之间的时间间隔,想法是将每小时的新行存储到临时表中(最终这将被保存到新表中以进行跟踪按小时停电)。当我在 21:30 到 22:15 运行它时,它会起作用。我得到两行反映 21:00 到 22:00 和 22:00 到 23:00(这是我想要的逻辑)。但是在那里扔军事午夜,我没有返回任何行,因为 calc 不会计算 00。
我在我的数据库中找到了显示开始时间为 22:00:0000 和结束时间为 00:00:00.0000000 的示例,反之亦然。因此,一种方法将计算,其中开始时间为 00,但如果开始时间为 21:00:0000,结束时间为 00:52:0000,则没有骰子。我没有返回任何行。