2010-11-29 3 views
27

Можно ли рассчитать разницу между двумя временными метками в Mysql и получить результат в секундах? like 2010-11-29 13:16:55 - 2010-11-29 13:13:55 должен дать 180 секунд.Разница MySql между двумя временными метками в секундах?

Спасибо

+0

Очень похожий вопрос был задан день назад: http://stackoverflow.com/questions/4289828/calculates-difference-between-two-dates-in-php/ – Orbling 2010-11-29 02:20:47

+1

@Orbling: Нет, результат очень отличается, потому что выход находится в hh: mm: ss – 2010-11-29 03:15:33

+0

@OMG. Ответ на этот вопрос: принятый один, находится в hh: mm: ss - другие ответы не являются, следовательно, он включает в себя его ответ. Которое вы пересчитали ниже. – Orbling 2010-11-29 03:19:57

ответ

25

Используйте UNIX_TIMESTAMP function для преобразования DATETIME в значение в секундах, начиная с 1 Jan, 1970:

SELECT UNIX_TIMESTAMP('2010-11-29 13:16:55') - UNIX_TIMESTAMP('2010-11-29 13:13:55') as output 

Результат:

output 
------- 
180 

Простой способ если вы не уверены, какое значение больше, чем другое - используйте ABS function:

SELECT ABS(UNIX_TIMESTAMP(t.datetime_col1) - UNIX_TIMESTAMP(t.datetime_col2)) as output 
125

Я не думаю, что принятый ответ является хорошим универсальным решением!

Это связано с тем, что функция UNIX_TIMESTAMP() не выполняется для DATE до 1970-01-01 (а для дат в далеком будущем с использованием 32-битных целых чисел). Это может случиться легко на день рождения многих живых людей.

Лучшее решение:

SELECT TIMESTAMPDIFF(SECOND, '2010-11-29 13:13:55', '2010-11-29 13:16:55') 

который может быть изменен, чтобы вернуть ДЕНЬ ГОД МЕСЯЦ Часовая и минутная тоже!

0

Метод TIMESTAMPDIFF работает только с форматом datetime. Если вы хотите, чтобы разница между просто два раза, как '11: 10: 00' минус '10: 20: 00' , то используйте

select TIME_TO_SEC('11:10:00')-TIME_TO_SEC('10:20:00')