如何计算T-SQL中的时差

时间:2015-07-26 07:00:14

标签: sql-server tsql

我创建了一个包含数据类型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 个答案:

答案 0 :(得分:3)

你可以这样做:

select *, convert(time, convert(datetime, timeto) - convert(datetime, timefrom)) 
from table1

这会将时间转换为第0天(1.1.1900)的日期时间,然后进行计算,如果时间较小,则会到达前一天,但转换为时间会从中获取时间部分。< / p>

SQL Fiddle

中的示例

答案 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