2013-05-03 148 views
3

我有一個由分鐘組成的列。有沒有簡單的方法將分鐘列分成只顯示幾天,幾小時,幾分鐘的一列?如何在tsql中將分鐘分爲天,小時和分鐘

DURATION    
----------- 
67   ==> 1 hour, 7 minutes 
1507   ==> 1 day, 1 hour, 7 minutes 
23   ==> 23 minutes 

我搜索瞭解決方案,但我沒有找到任何類似的解決方案。我想在報告中顯示這一點,但試圖找到我如何解決這個列看起來有意義。持續時間欄的計算是這樣的。

avg(datediff(MINUTE, ei.SentDate, eo.SentDate)) over(partition by ei.mailbox) as DURATION 
+2

如果「分鐘數」是分鐘數,「分鐘數」 60'只會給你分鐘,'(minutes/60)%24'只會給你幾個小時,'minutes /(60 * 24)'只會給你幾天。 (提示:%是模運算符,給出除法後的餘數)現在做一些奇特的字符串連接/格式化:) – Patashu 2013-05-03 06:05:38

回答

6

谷歌搜索落在我這裏http://www.sqlservercentral.com/Forums/Topic490411-8-1.aspx

和它說...我只是測試工作......

Declare @theMinutes int 
Set @theMinutes = 67 

Select @theMinutes/1440 as NoDays -- 1440 minutes per day 
     , (@theMinutes % 1440)/60 as NoHours -- modulo 1440 
     , (@theMinutes % 60) as NoMinutes -- modulo 60 
+0

謝謝我會嘗試它 – cihata87 2013-05-03 07:38:20

1
create FUNCTION fun_Date_Friendly (@minutes int) 
RETURNS nvarchar(100) 
AS 
BEGIN 
    return CASE 
    when @minutes < 60 then cast(@minutes as varchar(10)) + ' Min' 
    when @minutes < 1440 then cast(@minutes/60 as varchar(10)) + ' Hr, ' + cast(@minutes%60 as varchar(10)) + ' Min' 
    else cast(@minutes/(1440) as varchar(10)) + ' Days, ' + cast((@minutes%1440)/60 as varchar(10)) + ' Hr, ' + cast(((@minutes%1440)%60) as varchar(10)) + ' Min' 
    end 
end 
go 

然後只是傳遞分鐘起作用

select dbo.fun_Date_Friendly(20) val 
相關問題