SQL:有更有效的方法来计算经过的小时,分​​钟,秒吗?

时间:2010-05-22 03:34:32

标签: sql

我正在使用Computed Columns向我提供以下信息:

开始日期时间和结束日期时间之间的小时,分​​钟和秒(其中分钟和秒在0到59之间,小时可以是0或更大的任何值)

秒计算列:

datediff(second,[Start],[Finish]) % 60

分钟的计算列:

floor(datediff(second,[Start],[Finish]) / 60.0) % 60

小时计算列:

floor(datediff(second,[Start],[Finish]) / 3600.0)

以下是供参考的表格

alt text

注意:我也在计算其他计算列中的TotalElapsedSeconds,TotalElapsedMinutes和TotalElapsedHours,但这些很容易。我只是觉得我可能错过了SQL中一个很好的内置函数。

注意:我有一个检查约束,确保完成>开始

4 个答案:

答案 0 :(得分:1)

如果您使用的是sql server,则可以使用

datediff(minute,[Start],[Finish])
datediff(hour,[Start],[Finish])

答案 1 :(得分:1)

在查找与您正在使用的功能类似的两个日期之间的小时,分​​钟和秒数方面,您可以使用DatePart,如下所示:

DatePart(hh, Finish - Start)
DatePart(mi, Finish - Start)
DatePart(s, Finish - Start)

答案 2 :(得分:1)

您的SQL方言是否支持日期间隔数学的这种语法:

db=> select to_char(timestamp '2010-05-21 10:10:10' - '2009-10-11', 'ddd hh24:mi:ss');
   to_char    
--------------
 222 10:10:10
(1 row)

db=> select to_char(timestamp '2010-05-21 10:10:10' - '2001-10-11', 'ddd hh24:mi:ss');
    to_char    
---------------
 3144 10:10:10
(1 row)

db=> select to_char(timestamp '2010-05-21 10:10:10' - '2010-05-21', 'ddd hh24:mi:ss');
   to_char    
--------------
 000 10:10:10
(1 row)

答案 3 :(得分:0)

Create PROC TimeDurationbetween2times(@iTime as time,@oTime as time) 
As  
Begin  

DECLARE @Dh int, @Dm int, @Ds int ,@Im int, @Om int, @Is int,@Os int     

SET @Im=DATEPART(MI,@iTime)  
SET @Om=DATEPART(MI,@oTime)  
SET @Is=DATEPART(SS,@iTime)  
SET @Os=DATEPART(SS,@oTime)  

SET @Dh=DATEDIFF(hh,@iTime,@oTime)  
SET @Dm = DATEDIFF(mi,@iTime,@oTime)  
SET @Ds = DATEDIFF(ss,@iTime,@oTime)  

DECLARE @HH as int, @MI as int, @SS as int  

if(@Im>@Om)  
begin  
SET @Dh=@Dh-1  
end  
if(@Is>@Os)  
begin  
SET @Dm=@Dm-1  
end  

SET @HH = @Dh  
SET @MI = @Dm-(60*@HH)  
SET @SS = @Ds-(60*@Dm)  

DECLARE @hrsWkd as varchar(8)         

SET @hrsWkd = cast(@HH as char(2))+':'+cast(@MI as char(2))+':'+cast(@SS as char(2))          

select @hrsWkd as TimeDuration   

End