MySQL: как получить разницу между двумя временными метками в секундах

Есть ли способ сделать запрос в MySQL, который даст мне разницу между двумя временными метками в секундах, или мне нужно будет сделать это в PHP? И если да, то как мне это сделать?

86
задан S.L. Barth - Reinstate Monica 25 July 2012 в 15:12
поделиться

2 ответа

Вы можете использовать функции 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 уже сохранены как целое число, представляющее количество секунд с начала эпохи (Источник). Цитата из docs:

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

Имейте в виду, что TIMEDIFF() возвращает тип данных TIME. ВРЕМЯ значения могут варьироваться от '-838:59:59' до '838:59:59' (примерно 34,96 дня)

153
ответ дан 24 November 2019 в 07:58
поделиться
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2)

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

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

20
ответ дан 24 November 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: