如何在T-SQL中计算时间差

3

我创建了一个带有数据类型为time(7)的列的表。

我想要计算它们之间的时间差。

time

 id   timefrom     timeto      result
 --------------------------------------
 1    13:50:00     14:10:00    00:20:00   
 2    11:10:00     11:00:00    23:50:00

例如:
  • 开始时间 13:50
  • 结束时间 14:10

结果应该显示00:20

是否有此功能?

DATEDIFF(hour, UseTimeFrom, UseTimeTo) hourtime,
(DATEDIFF(MINUTE, UseTimeFrom , UseTimeTo)) - (((DATEDIFF(hour, UseTimeFrom, UseTimeTo)) * 60)) as mintime
2个回答

7
你可以这样做:
select *, convert(time, convert(datetime, timeto) - convert(datetime, timefrom)) 
from table1

这将把时间转换为日期0(1900年1月1日)的日期时间,然后进行计算,在timeto较小时,会到前一天,但convert to time将从中获取时间部分。
在SQL Fiddle中的示例: http://sqlfiddle.com/#!3/e56fc/1

1

虽然没有内置函数,但您可以相对容易地编写自己的T-SQL存储函数来计算此内容,类似于以下内容:

CREATE FUNCTION dbo.TimeDifference (@FromTime TIME(7), @ToTime TIME(7))
RETURNS VARCHAR(10)
AS BEGIN
    DECLARE @Diff INT = DATEDIFF(SECOND, @FromTime, @ToTime)

    DECLARE @DiffHours INT = @Diff / 3600;
    DECLARE @DiffMinutes INT = (@Diff % 3600) / 60;
    DECLARE @DiffSeconds INT = ((@Diff % 3600) % 60);

    DECLARE @ResultString VARCHAR(10)

    SET @ResultString = RIGHT('00' + CAST(@DiffHours AS VARCHAR(2)), 2) + ':' +
                        RIGHT('00' + CAST(@DiffMinutes AS VARCHAR(2)), 2) + ':' +
                        RIGHT('00' + CAST(@DiffSeconds AS VARCHAR(2)), 2)

    RETURN @ResultString
END

此函数使用整数除法(/)和整数取余(%)运算符来计算两个时间之间相隔的小时,分钟和秒数,然后将它们连接在一起成为您所需的字符串。
SELECT 
    dbo.TimeDifference('13:50:00', '14:10:00'),
    dbo.TimeDifference('13:50:00', '15:51:05'),
    dbo.TimeDifference('13:50:00', '15:35:45')

示例输出:

00:20:00     02:01:05     01:45:45

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接