求助: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;
测试数据及错误结果
| TimpPS | minim | Diff |
|---|---|---|
| 02:16,0 | 00:02:16.000000 | 0.000000 |
| 02:18,1 | 00:02:16.000000 | 2.100000 |
| 02:19,0 | 00:02:16.000000 | 3.000000 |
| 02:20,0 | 00:02:16.000000 | 4.000000 |
| 03:16,0 | 00:02:16.000000 | 100.000000 |
| 05:55,0 | 00:02:16.000000 | 339.000000 |
| 05:55,0 | 00:02:16.000000 | 339.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
相关产品推荐
相关产品推荐

