我需要编写一个函数,在一个名为 StartTime 的列中舍入时间,以仅显示小时并将其插入另一个名为 StartHour 的列。在另一个名为 EndTime 的列中,我还需要使用 DATEPART 向上舍入到下一个递增的小时(例如:23:33:00.0000000 将是 23(小时)+ 1(将其四舍五入到结束时间)= 24我需要将其保存到 EndHour 列)。
我想将这些新值插入到名为 StartHour 和 StartMinute、EndHour 和 EndMinute 的新列中(StartTime 和 EndTime 列是我以 time(7) 格式使用的原始值,出于历史目的,我保留它们在他们原来的列)。
这是我到目前为止在 T-SQL 中的内容:
SELECT (DATEPART(HOUR, [StartTime])) AS StartHour,(DATEPART(MINUTE, [StartTime])) AS StartMinute,
(DATEPART(HOUR, [EndTime])) AS EndHour,
(DATEPART(MINUTE, [EndTime])) AS EndMinute, StartTime, EndTime
FROM [test].[dbo].[Outage_Reports]
ORDER BY OutageDate ASC
产生:
StartHour StartMinute EndHour EndMinute Startime EndTime
16 0 17 30 16:00:00 17:30:00
我现在需要将此转换写入一个存储过程,当开始和结束之间的长度超过一小时时,该存储过程还会在表中插入两个(或更多,如果中断持续几个小时)新行。或者在中断时间低于或等于一小时时插入一行。然后我需要在开始列和结束列中考虑每小时的进度。 像这样:
StartHour StartMinute EndHour EndMinute Startime EndTime
16 0 17 00 16:00:00 17:30:00
(上面反映了停电的第一个小时,下面的第二行反映了停电的后半个小时,直到它停止......两者都将与表中的同一张停电单相关联)
StartHour StartMinute EndHour EndMinute Startime EndTime
17 30 18 00 16:00:00 17:30:00
这个想法是按小时跟踪网站中断,以便他们可以加入按小时跟踪订单的订单表(并且订单从不包含分钟......只有几个小时)。因此,计划是为持续 1.5 小时的中断制作两行,以便将 16、17 和一直到向上舍入的 18 小时值绑定到订单表,其中 30 分钟列作为另一个点计算量(所以一个半小时等于一小时的订单加上半小时的订单……逐行拆分)。这样我可以更好地跟踪中断期间的趋势。
对于如何将此逻辑写入存储过程,我有点不知所措。可以想象,我必须将新的小时和分钟值声明为变量,并且对于 StartHour 列,始终将其四舍五入为 DATEPART 小时值(即使它是 16:45...我想将 16 插入 StartHour 列)。但是,对于 EndHour 列,我想在 EndHour 列中插入一个向上取整的每小时值(17 和 18,因为在这种情况下我们已经过了一个小时)。这有望描述(通过这两行)发生中断的近两个小时。反过来,它可以轻松加入我们的订单表
任何有关此逻辑的存储过程的指导将不胜感激。