Чи є спосіб я зробити запит в 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.