为什么我在mysql上得到一个随机的负数?

时间:2013-06-17 14:47:36

标签: mysql timestamp

我正在运行以下查询,但是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 |

同样,最后一个是唯一返回的负值,我不知道为什么会这样。任何帮助表示赞赏。

1 个答案:

答案 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范围内获得正确的值。 或者使用与显示时间戳相同的默认格式。