Чи є спосіб я зробити запит в 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
стовпці функція повертає внутрішнє значення часової позначки безпосередньо, без неявного перетворення “string-to-Unix-timestamp”.Майте на увазі, що
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
.