2013-12-13 51 views
1

我試圖在SQL中將5整數時間轉換爲實時值。代碼如下,出樣線也在下面。我希望最終做的是減去結束時間和開始時間以獲得總時間,然後將它們相加在一起,並創建一個觸發器,用於說明員工何時觸發30,35和40小時標記,發送電子郵件以提醒有人。這是爲了加班的目的。將5位整數值轉換爲時間

SELECT empl_numb 
     ,start_time 
     ,end_time 
     ,dateadd(d, trans_rdat + 5843, 0) AS theday 
    FROM ei30 
WHERE empl_numb = '12345' -- and DATEADD(d, TRANS_RDAT + 5843 ,0) 
    AND shift_break_code NOT LIKE 'L' 
    AND shift_break_code NOT LIKE 'S' 
ORDER BY dateadd(d, trans_rdat + 5843, 0) DESC;  

結果:

EMPL_NUMB START_TIME END_TIME TheDay 
    12345  01257  01714  2013-12-12 00:00:00.000 
+0

你的整數代表什麼? –

+0

您是否可以選擇將'START_TIME'和'END_TIME'存儲爲'time'值而不是我所假設的'string's? –

+0

整數代表軍事時間的時間(只是刪除前導0) – user2178462

回答

1

這是典型的好習慣存儲日期和時間與適當的數據類型。

您可以使用DATEADD()和模量劃分爲時間部分:

DECLARE @time INT = 1234 
SELECT DATEADD(minute,@time%100,DATEADD(hour,(@time/100),CAST('' AS TIME))) 

編輯:既然它實際上是一個CHAR(5)可以使用SUBSTRING()和串聯:

DECLARE @time CHAR(5) = '' 
SELECT CAST(SUBSTRING(@time,2,2)+':'+RIGHT(@time,2) AS TIME) 
+1

OP的源數據類型爲CHAR(5) –

+0

這似乎適用於我的山羊CO! – user2178462

+0

@MichaelGunter錯過了,謝謝。不管數據類型如何,top方法都可以工作,但是由於它是一個字符串,子串方法可能會感覺更好。 –

0

,因爲你不能改變數據的類型,您必須執行字符串操作才能使用SUBSTRING將字符串更改爲有效的time格式,然後您可以使用CASTCONVERT功能。我沒有方便的SQL服務器實例,所以我會讓你把這些功能放在一起來產生你的解決方案。