我正在使用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)
以下是供参考的表格
注意:我也在计算其他计算列中的TotalElapsedSeconds,TotalElapsedMinutes和TotalElapsedHours,但这些很容易。我只是觉得我可能错过了SQL中一个很好的内置函数。
注意:我有一个检查约束,确保完成>开始
答案 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