You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何仅通过时间(无日期)判断航班两段行程是否超过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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 14:00:24