C'è un modo in cui posso fare una query in MySQL che mi dia la differenza tra due timestamp in pochi secondi, o avrei bisogno di farlo in PHP? E se è così, come potrei fare per farlo?
C'è un modo in cui posso fare una query in MySQL che mi dia la differenza tra due timestamp in pochi secondi, o avrei bisogno di farlo in PHP? E se è così, come potrei fare per farlo?
Risposte:
È possibile utilizzare TIMEDIFF()le TIME_TO_SEC()funzioni e come segue:
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)
Puoi anche usare la UNIX_TIMESTAMP()funzione suggerita da @Amber in un'altra risposta:
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)
Se stai usando il TIMESTAMPtipo di dati, immagino che la UNIX_TIMESTAMP()soluzione sarebbe leggermente più veloce, poiché i TIMESTAMPvalori sono già memorizzati come un numero intero che rappresenta il numero di secondi dall'epoca ( Fonte ). Citando i documenti :
Quando
UNIX_TIMESTAMP()viene utilizzata su unaTIMESTAMPcolonna, la funzione restituisce direttamente il valore del timestamp interno, senza conversione implicita da "stringa a timestamp Unix".Tieni presente che il
TIMEDIFF()tipo di dati restituito diTIME.TIMEi valori possono variare da "-838: 59: 59" a "838: 59: 59" (circa 34,96 giorni)
Che ne dici di "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')all'interno della funzione TIMESTAMPDIFF per la colonna che richiede la correzione della formattazione.
TIME_TO_SECraggiunge il massimo 3020399mentre questo restituisce il valore corretto.
Nota che la TIMEDIFF()soluzione funziona solo quando datetimessono a meno di 35 giorni di distanza!
TIMEDIFF()restituisce un TIMEtipo di dati e il valore massimo per TIME è 838: 59: 59 ore (= 34,96 giorni)
unitparametro suSECOND.