如何仅通过时间(无日期)判断航班两段行程是否超过24小时?
解决方案:过滤两段航班行程超24小时的数据
一、先明确时间差计算逻辑
首先得确定你要判断的是哪段时间跨度:
- 场景1:从第一段航班出发到第二段航班到达的总时长
- 场景2:第一段航班到达后到第二段航班出发的转机间隔
以下分两种字段类型给出SQL写法:
1. 如果时间字段是TIMESTAMP/DATETIME类型(含日期)
这种情况最直接,用时间差函数计算即可:
过滤总时长超24小时的数据
SELECT * FROM your_flight_table WHERE -- 保留总时长≤24小时的记录,用秒计算更精确 TIMESTAMPDIFF(SECOND, first_scheduled_departure_time, second_scheduled_arrival_time) <= 86400 -- 可选:过滤掉第二段航班信息为空的记录 AND second_scheduled_departure_time IS NOT NULL AND second_scheduled_arrival_time IS NOT NULL;
过滤转机间隔超24小时的数据
SELECT * FROM your_flight_table WHERE TIMESTAMPDIFF(SECOND, first_scheduled_arrival_time, second_scheduled_departure_time) <= 86400 AND second_scheduled_departure_time IS NOT NULL;
2. 如果时间字段是TIME类型(仅时分秒,无日期)
这种情况需要先处理跨天逻辑:默认第二段航班时间如果早于第一段的关键时间(比如出发/到达时间),则视为第二天的时间。以总时长判断为例:
SELECT * FROM your_flight_table WHERE CASE -- 第二段到达时间早于第一段出发时间,说明跨天,计算当天剩余时间+第二天时间 WHEN second_scheduled_arrival_time < first_scheduled_departure_time THEN TIME_TO_SEC(TIMEDIFF('23:59:59', first_scheduled_departure_time)) + TIME_TO_SEC(second_scheduled_arrival_time) + 1 ELSE TIME_TO_SEC(TIMEDIFF(second_scheduled_arrival_time, first_scheduled_departure_time)) END <= 86400 AND second_scheduled_departure_time IS NOT NULL AND second_scheduled_arrival_time IS NOT NULL;
二、关于用first出发时间判断第二段区间的可行性
完全不可行。这个逻辑和两段行程是否超过24小时没有任何关联:
- 比如你给出的第一行数据,first出发时间
08:25:00确实在第二段的08:20:00-12:10:00区间内,但它的总时长是超过24小时的; - 再看第三行数据,first出发时间
13:50:00不在第二段的07:55:00-09:40:00区间内,但如果第二段是第二天的航班,总时长其实不到24小时。
所以这个判断逻辑无法帮你过滤目标数据。
内容的提问来源于stack exchange,提问作者Jwan622
相关产品推荐
相关产品推荐

