Czy istnieje sposób, w jaki mogę wykonać zapytanie w MySQL, które da mi różnicę między dwoma znacznikami czasu w sekundach, czy też powinienem to zrobić w PHP? A jeśli tak, jak miałbym się do tego zabrać?
Czy istnieje sposób, w jaki mogę wykonać zapytanie w MySQL, które da mi różnicę między dwoma znacznikami czasu w sekundach, czy też powinienem to zrobić w PHP? A jeśli tak, jak miałbym się do tego zabrać?
Odpowiedzi:
Możesz użyć TIMEDIFF()i TIME_TO_SEC()funkcji w następujący sposób:
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)
Możesz również użyć UNIX_TIMESTAMP()funkcji, zgodnie z sugestią @Amber w innej odpowiedzi:
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)
Jeśli używasz TIMESTAMPtypu danych, myślę, że UNIX_TIMESTAMP()rozwiązanie byłoby nieco szybsze, ponieważ TIMESTAMPwartości są już przechowywane jako liczby całkowite reprezentujące liczbę sekund od epoki ( Źródło ). Cytując dokumenty :
Gdy
UNIX_TIMESTAMP()jest używana wTIMESTAMPkolumnie, funkcja zwraca wartość wewnętrznego znacznika czasu bezpośrednio, bez niejawnej konwersji „string-to-Unix-timestamp”.Pamiętaj, że
TIMEDIFF()zwracany typ danychTIME.TIMEwartości mogą wynosić od „-838: 59: 59” do „838: 59: 59” (około 34,96 dni)
A co z „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')w ramach funkcji TIMESTAMPDIFF dla kolumny, która wymaga poprawienia formatowania.
TIME_TO_SECosiąga maksimum na, podczas 3020399gdy zwraca poprawną wartość.
Pamiętaj, że TIMEDIFF()rozwiązanie działa tylko wtedy, gdy odstęp między nimi datetimesjest krótszy niż 35 dni !
TIMEDIFF()zwraca TIMEtyp danych, a maksymalna wartość TIME to 838: 59: 59 godzin (= 34,96 dni)
unitparametr naSECOND.