我有不同列车的数据,我需要计算等候时间,如果这个人正在等火车这将是适用的,如果该人正在乘坐连接列车,但问题是我有到达时间和每个车站所有列车的出发时间。
在图像中,你可以看到到达和离开时间的数据是我真正需要的时间格式,如果一个人正在为该路线选择源和目的地,如果他需要乘坐两列火车,如果第一列火车已经从早上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
答案 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
,因为您可能不知道是否有可能在多天内运行的意外数据。