Sql server 如何在T-SQL中计算时差

Sql server 如何在T-SQL中计算时差,sql-server,tsql,Sql Server,Tsql,我已经创建了一个数据类型为time(7) 我想计算它们之间的时差 表时间: 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 有没有这个功能 DATEDI

我已经创建了一个数据类型为
time(7)

我想计算它们之间的时差

时间

 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

您可以这样做:

select *, convert(time, convert(datetime, timeto) - convert(datetime, timefrom)) 
from table1
这会将第0天(1.1.1900)的时间转换为datetime,然后进行计算,如果timeto较小,则会转换为前一天,但convert to time会从中获得时间部分


例如,在

中没有内置函数,但您可以相对轻松地编写自己的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