我正在运行以下查询,但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 |同样,最后一个是唯一返回的负值,我不确定这是为什么。任何帮助都是非常感谢的。
发布于 2013-06-17 23:21:46
您正在使用FROM_UNIXTIME()的默认格式来显示time_started和time_finished,但是为了计算时间差,您需要将时间戳转换为'%Y-%m-%d %h:%i:%s'格式。
在此格式中,%h表示小时01-12 (AM或PM),因此最后一行的time_finished为'2013-06-11 01:18:30‘。它是比同一行中的time_started更早的时间戳,所以您会得到一个负结果。
您应该使用`%H'而不是'%h'数小时来获取00-23范围内的正确值。或者使用与显示时间戳相同的默认格式。
https://stackoverflow.com/questions/17150433
复制相似问题