我需要編寫一個函數,該函數在一列中調用StartTime,以顯示小時並將其插入另一個名爲StartHour的列中。在另一個名爲EndTime的列中,我還需要使用DATEPART累計到下一個增加的小時數(例如:23:33:00.00000000將是23(小時)+1(將其舍入到最後小時)= 24我需要將它保存到EndHour列中)。需要編寫SQL Server存儲過程以基於時間計算來保存一個或多個行
我要插入這些新的值到名爲StartHour和StartMinute,EndHour和EndMinute(於starttime和結束時間列的新列我在時間(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列,我想插入向上舍入的小時值(17,然後是18,因爲我們在這種情況下超過了一個小時)進入EndHour列。這將希望描述(通過這兩行)接近兩個小時的停電事件。反過來,它將允許輕鬆加入我們的訂單表
任何有關此邏輯的存儲過程的指導將不勝感激。
如果一箇中斷在某個小時完全結束*(我知道有一些機會,但可能甚至在一小時的第一分鐘內),那麼您是否仍然會在下一個小時內結束?另外,你是否必須處理跨越午夜的中斷? – 2012-04-25 07:18:05
是的,你的兩個問題。如果它從3:00開始,中斷從3:01開始...我們將它記錄爲StartHour 3和EndHour 4,然後使用持續時間的分鐘數(這是我將要做的一個單獨的計算)來確定長度。然後,我們將該計算應用於訂單數量。我現在需要的只是知道如何將停機時間逐小時地放入桌子。謝謝! – Lynn 2012-04-25 07:36:52
對於我的第一個問題,我的意思是 - 如果停電在2:45開始,並且*在* 3:00結束,我們插入一排(2-3)還是兩排(2-3和3-4)? – 2012-04-25 07:43:30