2010-08-20 22 views

Respuesta

110

podría utilizar el TIMEDIFF() y los TIME_TO_SEC() funciones de la siguiente manera:

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 es posible usar la función UNIX_TIMESTAMP() como @Amber suggested 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 solución UNIX_TIMESTAMP() sería un poco más rápida, ya que los valores TIMESTAMP ya están almacenados como un número entero que representa el número r de segundos desde la época (Source). Citando la docs:

Cuando UNIX_TIMESTAMP() se utiliza en una columna de TIMESTAMP, la función devuelve el valor de marca de tiempo interno directamente, sin conversión implícita “-serie-a Unix-marca de tiempo”.

Tenga en cuenta que TIMEDIFF()return data type of TIME. TIME valores pueden variar desde '-838: 59: 59' a '838: 59: 59' (aproximadamente 34,96 días)

+10

También puede utilizar [TIMESTAMPDIFF] (http://dev.mysql.com/ doc/refman/5.1/es/date-and-time-functions.html # function_timestampdiff), que lo hace en una sola función - simplemente configure el parámetro 'unit' en' SECOND'. – Mike

+0

+1 para la explicación del rendimiento. No estaba usando UNIX_TIMESTAMP() porque pensé que tomaría más tiempo. – elcool

16
UNIX_TIMESTAMP(ts1) - UNIX_TIMESTAMP(ts2) 

Si desea una diferencia sin firmar, añada una ABS() alrededor de la expresión.

Alternativamente, puede usar TIMEDIFF(ts1, ts2) y luego convertir el resultado de la hora en segundos con TIME_TO_SEC().

4

Tenga en cuenta que la solución TIMEDIFF() solo funciona cuando el datetimes es menos de 35 días aparte! TIMEDIFF() devuelve un tipo de datos TIME, y el valor max porque el tiempo es 838: 59: 59 horas (= 34,96 días)

Cuestiones relacionadas