我创建了一个包含数据类型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
例如:
结果应显示 00:20 。
这是否有功能?
DATEDIFF(hour, UseTimeFrom, UseTimeTo) hourtime,
(DATEDIFF(MINUTE, UseTimeFrom , UseTimeTo)) - (((DATEDIFF(hour, UseTimeFrom, UseTimeTo)) * 60)) as mintime
答案 0 :(得分:3)
你可以这样做:
select *, convert(time, convert(datetime, timeto) - convert(datetime, timefrom))
from table1
这会将时间转换为第0天(1.1.1900)的日期时间,然后进行计算,如果时间较小,则会到达前一天,但转换为时间会从中获取时间部分。< / p>
中的示例答案 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