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

求助:MySQL计算varchar格式含毫秒时间与最优时间的差值

问题场景

MySQL中timpi表的timpPS字段为varchar类型,存储选手耗时数据,格式为分钟:秒,毫秒(示例:02:18,1、02:18,10、02:18,325)。需计算每条数据与最优时间(该字段最小值)的差值,用于PHP展示,但最初编写的SQL语句在差值超过1分钟时计算结果错误。

尝试的错误SQL语句

SELECT timpPS, 
(str_to_date( TimpPS, '%i:%s,%f' )) AS Timp,
(SELECT min( str_to_date( TimpPS, '%i:%s,%f' )) FROM timpi ) AS minim,
(str_to_date( concat("00:",TimpPS), '%H:%i:%s,%f' ) - (SELECT min( str_to_date( concat("00:",TimpPS), '%H:%i:%s,%f' )) FROM timpi )) AS Diff 
FROM
    timpi 
ORDER BY
    Diff ASC;

测试数据及错误结果

TimpPSminimDiff
02:16,000:02:16.0000000.000000
02:18,100:02:16.0000002.100000
02:19,000:02:16.0000003.000000
02:20,000:02:16.0000004.000000
03:16,000:02:16.000000100.000000
05:55,000:02:16.000000339.000000
05:55,000:02:16.000000339.000000

最优时间为02:16,0,但差值超过1分钟时(如03:16,0与最优时间的差值应为60秒),错误SQL计算出的Diff结果不符合预期。

正确的SQL语句

SELECT timpPS, 
(str_to_date( TimpPS, '%i:%s,%f' )) AS Timp,
(SELECT min( str_to_date( TimpPS, '%i:%s,%f' )) FROM timpi ) AS minim,
TIMEDIFF(str_to_date( TimpPS, '%i:%s,%f' ),(SELECT min( str_to_date( TimpPS, '%i:%s,%f' )) FROM timpi )) AS Diff 
FROM
    timpi 
ORDER BY
    Diff ASC;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 15:52:50