MySQL 8中如何将%H:%i:%s格式时长转换为总分钟+秒的%i:%s格式
MySQL 8 时长格式转换实现方案
你可以通过TIME_TO_SEC函数先将时间差转换为总秒数,再做单位换算拼接即可,最终查询语句如下:
SELECT CONCAT( FLOOR(TIME_TO_SEC(TIMEDIFF(date_end, date_start)) / 60), ':', LPAD(MOD(TIME_TO_SEC(TIMEDIFF(date_end, date_start)), 60), 2, '0') ) AS duration_min_sec FROM `table`;
逻辑说明
TIMEDIFF(date_end, date_start):得到%H:%i:%s格式的时间差结果TIME_TO_SEC():将时间格式的值转换为总秒数,比如示例中的02:10:25会被转换为7825秒- 总秒数除以60向下取整得到累计总分钟数:7825 / 60 = 130.416,取整后为130
- 总秒数对60取余得到剩余秒数:7825 % 60 = 25
LPAD(剩余秒数, 2, '0'):给不足两位的秒数补前导零,保证秒数固定为两位格式,避免出现130:5这类不符合格式的结果
特殊场景适配
如果存在date_end早于date_start的情况,TIMEDIFF会返回负的时间值,最终结果也会携带负号。如果需要统一返回正的时长,可对总秒数加绝对值处理,修改后语句如下:
SELECT CONCAT( FLOOR(ABS(TIME_TO_SEC(TIMEDIFF(date_end, date_start))) / 60), ':', LPAD(MOD(ABS(TIME_TO_SEC(TIMEDIFF(date_end, date_start))), 60), 2, '0') ) AS duration_min_sec FROM `table`;
内容的提问来源于stack exchange,提问作者evgu
相关产品推荐
相关产品推荐

