2013-11-25 49 views
1

我想要两个datetime列像1day , 2hours, 3min.获得日期时间差作为1天,2小时,30分钟

我试图与此不同,

DECLARE @end datetime2 = '2013-11-13 09:35:49.007' 
DECLARE @start datetime2 = '2013-11-12 17:34:11.533' 

select datediff(day, @start, @end) days, 
datediff(HOUR, @start, @end) Hours, 
datediff(MINUTE, @start, @end) Minutes 

输出

1day 16hours 961minutes. 

但我想输出像1day 4hours 30min.

需要一些h elp来解决这个问题。谢谢

回答

3

您样本的差异是16小时1分38秒。你在哪里拿出1天4小时30分钟? 17:34是5:34 PM,而不是5:34 AM。

下面是代码,将执行从日期差异描述文本。注意:为了解决0周,几天,几小时等边缘情况,你必须在做演员前检查。

DECLARE @end datetime2 = '2013-11-13 09:35:49.007' 
DECLARE @start datetime2 = '2013-11-12 17:34:11.533' 

SELECT '' 
    + CAST(DATEDIFF(second, @start, @end)/60/60/24/7 AS NVARCHAR(50)) + ' weeks, ' 
    + CAST(DATEDIFF(second, @start, @end)/60/60/24 % 7 AS NVARCHAR(50)) + ' days, ' 
    + CAST(DATEDIFF(second, @start, @end)/60/60 % 24 AS NVARCHAR(50)) + ' hours, ' 
    + CAST(DATEDIFF(second, @start, @end)/60 % 60 AS NVARCHAR(50)) + ' minutes and ' 
    + CAST(DATEDIFF(second, @start, @end) % 60 AS NVARCHAR(50)) + ' seconds.'; 

输出:

0 weeks, 0 days, 16 hours, 1 minutes and 38 seconds. 
相关问题