StartTime EndTime TimeDifference
6:36:56 6:36:56 00:31 :52
7:08:48 7:26:18 00:00 :23
7:26:41 8:08:26 00:00 :09
08:35.0 16:54.0 00:09 :42
26:36.0 59:34.0 00:00 :09
59:43.0 19:13.0 #VALUE!
使用公式F(x)= TEXT(A3-B2," hh:mm:ss")在Excel中执行此计算,但如何在SQL Server 2005中使用SQL实现此目的? 请记住,标题排在第1行,而实际时间从第2行,第3行等开始。因此,7:08:48 - 6:36:56 = 00:31:52分别是正确的,这就是我想要的计算。警告:我不想这样计算(7:26:18 - 7:08:48 = 00:17:30)它很简单,不符合我的业务需求而且我知道它
答案 0 :(得分:0)
试试例子
SELECT CONVERT(VARCHAR(10),DATEADD(MINUTE,DATEDIFF(MINUTE,'7:08:48','7:26:18'),'2011-01-01 00:00:00.000'),114)
答案 1 :(得分:0)
您可以使用DATEDIFF函数来获取两个DateTime值之间的时间部分的差异(请参阅http://www.w3schools.com/sql/func_datediff.asp)
例如,以下SQL将为您提供两个DateTimes之间的小时,分钟和秒
DECLARE @DT1 DATETIME
SET @DT1= '2016-04-18'
DECLARE @DT2 DATETIME
SET @DT2 = GETDATE()
SELECT
DATEDIFF(HOUR, @DT1, @DT2) AS [Hours],
DATEDIFF(MINUTE, @DT1, @DT2) - (DATEDIFF(HOUR, @DT1, @DT2) * 60) AS [Minutes],
DATEDIFF(SECOND, @DT1, @DT2) - (DATEDIFF(MINUTE, @DT1, @DT2) * 60) AS [Seconds]
Hours Minutes Seconds
16 31 35
你要做的是找到不同行上的DateTimes之间的区别,所以你需要使用OUTER APPLY将表连接到自身,如下所示(如果你有一个递增的ID列,那么LEFT JOIN on tb1a.id = tb1b.id + 1表现更好):
DECLARE @Table1 TABLE (Date1 DATETIME, Date2 DATETIME)
INSERT INTO @Table1 VALUES('2016-04-18 10:01', '2016-04-18 10:02')
INSERT INTO @Table1 VALUES( '2016-04-18 10:06','2016-04-18 10:09')
SELECT t1a.Date1, t1a.Date2 , t1b.Date1, t1b.Date2
FROM @Table1 t1a
OUTER APPLY
(
SELECT TOP 1 Date1, Date2 FROM @Table1 t1b WHERE Date1 > t1a.Date1 ORDER BY Date1
) t1b
这给了你:
Date1 Date2 NextDate1 NextDate2
2016-04-18 10:01:00 2016-04-18 10:02:00 2016-04-18 10:06:00 2016-04-18 10:09:00
2016-04-18 10:06:00 2016-04-18 10:09:00 NULL NULL
然后您需要做的就是使用上面的DATEDIFF来产生时差