2010-08-20 2 views

ответ

110

Вы можете использовать TIMEDIFF() и TIME_TO_SEC() функции следующим образом:

SELECT TIME_TO_SEC(TIMEDIFF('2010-08-20 12:01:00', '2010-08-20 12:00:00')) diff; 
+------+ 
| diff | 
+------+ 
| 60 | 
+------+ 
1 row in set (0.00 sec) 

Вы можете также использовать функцию UNIX_TIMESTAMP(), как @Amber suggested в другой ответ:

SELECT UNIX_TIMESTAMP('2010-08-20 12:01:00') - 
     UNIX_TIMESTAMP('2010-08-20 12:00:00') diff; 
+------+ 
| diff | 
+------+ 
| 60 | 
+------+ 
1 row in set (0.00 sec) 

Если вы используете TIMESTAMP тип данных, я думаю, что решение UNIX_TIMESTAMP() будет немного быстрее, так как значения TIMESTAMP уже сохранены как целое число, представляющее numbe г секунд с эпохи (Source). Цитирование в docs:

Когда UNIX_TIMESTAMP() используется на TIMESTAMP колонке, функция возвращает значение внутренней временной метки непосредственно, без подразумеваемого «строка-к-Unix-временной метки» преобразования.

Имейте в виду, что TIMEDIFF()return data type of TIME. TIME значения могут варьироваться от '-838: 59: 59' до '838: 59: 59' (примерно 34,96 дней)

+10

Можно также использовать [TIMESTAMPDIFF] (http://dev.mysql.com/ doc/refman/5.1/ru/date-and-time-functions.html # function_timestampdiff), который делает это в одной функции - просто установите параметр 'unit' в' SECOND'. – Mike

+0

+1 для объяснения производительности. Я не использовал UNIX_TIMESTAMP(), потому что думал, что потребуется больше времени. – elcool

16
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2) 

Если вы хотите разницу без знака, добавьте ABS() вокруг выражения.

В качестве альтернативы вы можете использовать TIMEDIFF(ts1, ts2), а затем преобразовать результат времени в секундах с помощью TIME_TO_SEC().

19

Как о "TIMESTAMPDIFF":

SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics` 

http://www.w3resource.com/mysql/date-and-time-functions/mysql-timestampdiff-function.php

+0

Если ваш столбец даты находится в другом формате, который YYYY-MM-DD попробует сделать это: 'str_to_date (date_column, '% m /% d /% Y')' в функции TIMESTAMPDIFF для столбца, который нуждается в его форматировании. – greaterKing

4

Обратите внимание, что решение TIMEDIFF() работает только тогда, когда datetimesменее чем за 35 дней! TIMEDIFF() возвращает TIME тип данных, а значение макс для TIME составляет 838: 59: 59 часов (= 34,96 дней)

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