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

MariaDB如何筛选8:00-16:00的行及CAST时间比较无返回结果问题

问题原因排查

你遇到的无返回结果问题,核心原因大概率是DepTime字段的存储格式和CAST转换逻辑不匹配,最常见的场景是航班准点率数据集的DepTime为HHMM格式的整数类型(比如8点存储为800、16点30存储为1630),直接CAST(DepTime AS TIME)会将数值按「秒」解析,比如800会被转换为00:08:00,自然永远小于08:00:00,导致无结果返回。

第一步:验证转换逻辑是否正确

先执行以下语句查看转换结果是否符合预期:

SELECT DepTime, CAST(DepTime AS TIME) AS 转换后时间, CAST(DepTime AS TIME) > '08:00:00' AS 比较结果
FROM ontime
LIMIT 20;

如果输出的转换后时间和实际的起飞时间不符,就说明转换逻辑需要调整。

修正方案

场景1:DepTime为HHMM格式整数

使用LPAD补全前导零后再转换为TIME类型,筛选8:00到16:00的查询语句如下:

SELECT *
FROM ontime
WHERE Cancelled != 1 
  AND Diverted != 1 
  AND CAST(LPAD(DepTime, 4, '0') AS TIME) BETWEEN '08:00:00' AND '16:00:00';

如果追求查询性能,也可以直接用数值比较(无需类型转换,可命中索引):

SELECT *
FROM ontime
WHERE Cancelled != 1 
  AND Diverted != 1 
  AND DepTime BETWEEN 800 AND 1600;

场景2:DepTime为字符串格式

如果DepTime是字符串但存在空格、格式不规范的问题,先修剪后再转换:

SELECT *
FROM ontime
WHERE Cancelled != 1 
  AND Diverted != 1 
  AND CAST(TRIM(DepTime) AS TIME) BETWEEN '08:00:00' AND '16:00:00';

内容的提问来源于stack exchange,提问作者Kevin Garcia

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 11:36:00