我想在两个日期时间和我当前的方法之间显示时间差,除了当小时,分钟和秒小于10时,它只显示一个数字,我想添加前导零到输出。
查询看起来像这样。
SELECT *,
CONCAT(
MOD( TIMESTAMPDIFF(hour, start_time, end_time), 24), ':',
MOD( TIMESTAMPDIFF(minute, start_time, end_time), 60), ':',
MOD( TIMESTAMPDIFF(second, start_time, end_time), 60)
) AS total_time
FROM test_db
当时间数字小于10时,它会输出以下结果。
4:53:21
10:1:9
6:3:8
我的目标是输出显示如下。
04:53:21
10:01:09
06:03:08
注意:我将此结果传递给一个数组,然后将该数组发送到AJAX回调以在动态生成的表上输出结果。如果有一个更好的解决方案可以使用jquery / ajax,那么我不仅仅对任何建议持开放态度。但是,由于我最终需要将此结果导出到excel文件,所以我一直倾向于使用查询解决方案。
答案 0 :(得分:1)
一种方法是在前面加零,然后取最右边的两个字符......
SEC_TO_TIME(MOD(TIMESTAMPDIFF(SECOND,start_time,end_time),24*60*60))
仅当expr的值为非负数且不超过两位数时才有效。
作为一种完全不同的方法,您可以在几秒钟内获得差异,并转换为TIME数据类型...
'0'
小时部分仍然可能少于两位数,因此您可以应用与上面相同的模式...前置DATE_FORMAT( timeexpr, '%T')
字符,并取最右边的八个字符。
或者,您可以将其包装在{{1}}
中答案 1 :(得分:1)
您可以组合使用TIME_FORMAT和SEC_TO_TIME,并避免使用MOD()函数将小时数限制为2位输出。
var viewer = OpenSeadragon({
...,
overlays: [
{
id: 'overlay1',
...
}
]
});
new OpenSeadragon.MouseTracker({
element: 'overlay1'
});
答案 2 :(得分:0)
尝试:
DATE_FORMAT(concat part, '%H:%m:%s')
并查看它是否适合您