2013-05-03 162 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