如果只有24小时格式的时间,计算等待时间?

时间:2016-06-10 06:26:34

标签: sql-server

我有不同列车的数据,我需要计算等候时间,如果这个人正在等火车这将是适用的,如果该人正在乘坐连接列车,但问题是我有到达时间和每个车站所有列车的出发时间。

在图像中,你可以看到到达和离开时间的数据是我真正需要的时间格式,如果一个人正在为该路线选择源和目的地,如果他需要乘坐两列火车,如果第一列火车已经从早上9:00:00 Am开始,然后从23:00:00 PM出发,第二列火车从00:00:00 Am开始,然后我需要找到等待时间,即23:00:00PM到{{1}的差异但是如果在找到差异时它会显示负数,但我需要的是它应该将00:00:00 AM视为第二天并且应该给我时间为正

当前代码:

00:00:00 Pm

“数据:

SELECT DISTINCT TOP 1 
    (t1.Train_No + ',' + t2.Train_No) AS TrainSeq
    ,DATEDIFF(MI, CONVERT(TIME, t2.Arrival_Time), Convert(TIME, t1.Depature_Time)) AS Waiting_Time
FROM Rail t1
JOIN Rail t2 
    ON t2.Source_Station_Name = t1.Destination_Station_Name
    AND T2.Arrival_Time > T1.Depature_time  
WHERE t1.Source_Station_Name LIKE 'Ernakulam%'
    AND t2.Destination_Station_Name LIKE 'Agra%'
ORDER BY Waiting_Time ASC

1 个答案:

答案 0 :(得分:1)

我已为此示例制作了一些示例数据;

CREATE TABLE #Times (ID int, StartTime time, EndTime time)
INSERT INTO #Times
VALUES
(1,'10:00','11:00')
,(2,'14:00','20:00')
,(3,'23:00','00:00')
,(4,'22:00','02:00')

以下查询包含您当前的DATEDIFF语句,后跟一个CASE表达式,可让您检查自己是否在午夜时间运行;

SELECT 
ID
,StartTime
,EndTime
,DATEDIFF(MI, CONVERT(TIME, StartTime), Convert(TIME, EndTime)) original
,CASE
    WHEN EndTime < StartTime 
        THEN DATEDIFF(MI, CONVERT(TIME, StartTime), Convert(TIME, EndTime)) + 1440
    ELSE DATEDIFF(MI, CONVERT(TIME, StartTime), Convert(TIME, EndTime))
END NewCalc
FROM #Times

1440数字是一天中的分钟数(60 mins * 24 hours)

输出看起来像这样;

ID  StartTime           EndTime             original    NewCalc
1   10:00:00.0000000    11:00:00.0000000    60          60
2   14:00:00.0000000    20:00:00.0000000    360         360
3   23:00:00.0000000    00:00:00.0000000    -1380       60
4   22:00:00.0000000    02:00:00.0000000    -1200       240

根据您的示例,差异以分钟为单位。您应该使用datediff字段进行datetime,因为您可能不知道是否有可能在多天内运行的意外数据。