如何在sql中将分钟拆分为天、小时和分钟
Posted
技术标签:
【中文标题】如何在sql中将分钟拆分为天、小时和分钟【英文标题】:How to split minutes into days, hours and minutes in tsql 【发布时间】:2013-05-03 06:02:12 【问题描述】:我有一个由分钟组成的专栏。是否有任何简单的方法可以将分钟列拆分为仅显示天、小时、分钟的一列?
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
【问题讨论】:
如果minutes
是您的分钟数,minutes%60
只会给您分钟,(minutes/60)%24
只会给您小时,minutes/(60*24)
只会给您几天。 (提示:% 是模运算符,除法后给出余数)现在做一些花哨的字符串连接/格式化:)
【参考方案1】:
谷歌搜索让我来到这里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
【讨论】:
【参考方案2】: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
【讨论】:
以上是关于如何在sql中将分钟拆分为天、小时和分钟的主要内容,如果未能解决你的问题,请参考以下文章
如何在 SQL 中将小时、分钟和秒 (HH:mm:ss) 转换为分钟和秒 (mm:ss)
如何将 270921sec 转换为天 + 小时 + 分钟 + 秒? (红宝石)