Есть ли способ сделать запрос в MySQL, который даст мне разницу между двумя отметками времени в секундах, или мне нужно будет сделать это в PHP? И если да, то как я могу это сделать?
Есть ли способ сделать запрос в MySQL, который даст мне разницу между двумя отметками времени в секундах, или мне нужно будет сделать это в PHP? И если да, то как я могу это сделать?
Ответы:
Можно использовать 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 в другом ответе:
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
значения уже хранятся в виде целого числа, представляющего количество секунд с эпохи ( Источник ). Цитата из документов :
При
UNIX_TIMESTAMP()
использовании вTIMESTAMP
столбце функция возвращает значение внутренней метки времени напрямую, без неявного преобразования «строка в метку времени Unix».Имейте в виду, что
TIMEDIFF()
возвращаемый тип данныхTIME
.TIME
значения могут варьироваться от -838: 59: 59 до 838: 59: 59 (примерно 34,96 дня).
Как насчет "TIMESTAMPDIFF":
SELECT TIMESTAMPDIFF(SECOND,'2009-05-18','2009-07-29') from `post_statistics`
https://dev.mysql.com/doc/refman/5.7/en/date-and-time-functions.html#function_timestampdiff
str_to_date(date_column, '%m/%d/%Y')
в функции TIMESTAMPDIFF для столбца, который нуждается в исправлении форматирования.
TIME_TO_SEC
достигает максимума, 3020399
тогда как это возвращает правильное значение.
Обратите внимание, что TIMEDIFF()
решение работает только тогда, когда разница datetimes
составляет менее 35 дней !
TIMEDIFF()
возвращает TIME
тип данных, а максимальное значение TIME составляет 838: 59: 59 часов (= 34,96 дней)
unit
параметра значениеSECOND
.