我正在运行以下查询,但是TIMESTAMPDIFF函数中有一个随机结果返回一个负值,只有一个:
select JOB_ID,FROM_UNIXTIME(TIME_STARTED/1000) as TIME_STARTED,FROM_UNIXTIME(TIME_FINISHED/1000) as TIME_FINISHED,TIMESTAMPDIFF(SECOND,FROM_UNIXTIME(TIME_STARTED/1000, '%Y-%m-%d %h:%i:%s'),FROM_UNIXTIME(TIME_FINISHED/1000, '%Y-%m-%d %h:%i:%s')) AS DURATION from JOB;
以下是一些返回的数据:
| job_201306051933_0707 | 2013-06-10 23:16:57 | 2013-06-10 23:17:06 | 9 |
| job_201306051933_0832 | 2013-06-11 10:00:47 | 2013-06-11 10:29:03 | 1696 |
| job_201306051933_0850 | 2013-06-11 12:49:57 | 2013-06-11 13:18:30 | -41487 |
同样,最后一个是唯一返回的负值,我不知道为什么会这样。任何帮助表示赞赏。
答案 0 :(得分:1)
您使用FROM_UNIXTIME()
的默认格式来显示time_started和time_finished,但要计算时差,请将时间戳转换为'%Y-%m-%d %h:%i:%s'
格式。
此格式%h
表示小时01-12(上午或下午),因此最后一行的time_finished将被视为“2013-06-11 01:18:30”。它是比同一行中time_started更早的时间戳,因此您得到否定结果。
您应该使用`%H'
代替'%h'
数小时才能在00-23范围内获得正确的值。
或者使用与显示时间戳相同的默认格式。