Respuestas:
Puede utilizar TIMEDIFF()las TIME_TO_SEC()funciones y las siguientes:
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)
También puede usar la UNIX_TIMESTAMP()función como @Amber sugirió en otra respuesta:
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)
Si está utilizando el TIMESTAMPtipo de datos, supongo que la UNIX_TIMESTAMP()solución sería un poco más rápida, ya que los TIMESTAMPvalores ya están almacenados como un número entero que representa el número de segundos desde la época ( Fuente ). Citando los documentos :
Cuando
UNIX_TIMESTAMP()se utiliza en unaTIMESTAMPcolumna, la función devuelve el valor de la marca de tiempo interna directamente, sin conversión implícita de "cadena a marca de tiempo Unix".Tenga en cuenta que
TIMEDIFF()devuelve el tipo de datosTIME.TIMElos valores pueden oscilar entre '-838: 59: 59' a '838: 59: 59' (aproximadamente 34,96 días)
¿Qué tal "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')dentro de la función TIMESTAMPDIFF para la columna que necesita que se corrija el formato.
TIME_TO_SECalcanza el máximo 3020399mientras que esto devuelve el valor correcto.
Tenga en cuenta que la TIMEDIFF()solución solo funciona cuando datetimeshay menos de 35 días de diferencia.
TIMEDIFF()devuelve un TIMEtipo de datos y el valor máximo de TIME es 838: 59: 59 horas (= 34,96 días)
unitparámetro enSECOND.