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 TIMESTAMP
tipo de datos, supongo que la UNIX_TIMESTAMP()
solución sería un poco más rápida, ya que los TIMESTAMP
valores 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 unaTIMESTAMP
columna, 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
.TIME
los 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_SEC
alcanza el máximo 3020399
mientras que esto devuelve el valor correcto.
Tenga en cuenta que la TIMEDIFF()
solución solo funciona cuando datetimes
hay menos de 35 días de diferencia.
TIMEDIFF()
devuelve un TIME
tipo de datos y el valor máximo de TIME es 838: 59: 59 horas (= 34,96 días)
unit
parámetro enSECOND
.