2013-06-17 2 views
0

Я бегу следующий запрос, но есть один случайный результат из функции TIMESTAMPDIFF, что возвращается отрицательное значение, только один:Почему я получаю случайное отрицательное число на mysql?

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

Вы используете формат по умолчанию для 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. Или используйте тот же формат по умолчанию, который вы используете для отображения временных меток.

+0

Я знал, что это не может быть трудно. Благодаря! – user1745713

+0

Я также нашел необычную альтернативу этому: SELECT *, TIMESTAMPDIFF (SECOND, TIME_STARTED, TIME_FINISHED) FROM (SELECT * FROM (SELECT JOB_ID, FROM_UNIXTIME (TIME_STARTED/1000) AS TIME_STARTED, FROM_UNIXTIME (TIME_FINISHED/1000) AS TIME_FINISHED FROM JOB WHERE USER_SUBMITTED = 'hddvmktg') AS TIMES) AS NEW; – user1745713

Смежные вопросы