2010-11-29 57 views
27

¿Es posible calcular la diferencia entre dos marcas de tiempo en Mysql y obtener resultados en segundos? como 2010-11-29 13:16:55 - 2010-11-29 13:13:55 debería dar 180 segundos.Diferencia de MySql entre dos marcas de tiempo en segundos?

Gracias

+0

Una pregunta muy similar se le pidió hace un día: http://stackoverflow.com/questions/4289828/calculates-difference-between-two-dates-in-php/ – Orbling

+1

@Orbling: No, el resultado es muy diferente porque la salida está en hh: mm: ss –

+0

@OMG Mi respuesta a esa pregunta, la aceptado, está en hh: mm: ss - las otras respuestas no son, por lo tanto, incluye su respuesta. Que has replanteado a continuación. – Orbling

Respuesta

25

Uso del UNIX_TIMESTAMP function para convertir el DATETIME en el valor en segundos, a partir del 1 de Ene, 1970:

SELECT UNIX_TIMESTAMP('2010-11-29 13:16:55') - UNIX_TIMESTAMP('2010-11-29 13:13:55') as output 

Resultado:

output 
------- 
180 

Una manera fácil tratar con si no está seguro de qué valor es más grande que el otro - use el ABS function:

SELECT ABS(UNIX_TIMESTAMP(t.datetime_col1) - UNIX_TIMESTAMP(t.datetime_col2)) as output 
+4

falla para DATE antes del 1970-01-01 –

+1

@RidIculous Usted gana un punto de internet. – JamesG

+0

gracias, James. Lo pondré a mis otros. Soy viejo así que para mí obtener mi cumpleaños en cuestión de segundos. : oP –

125

¡No creo que la respuesta aceptada sea una buena solución universal!

Esto se debe a que la función UNIX_TIMESTAMP() falla para DATE antes del 1970-01-01 (y para las fechas en el futuro lejano con enteros de 32 bits). Esto puede suceder fácilmente para el día del nacimiento de muchas personas vivas.

Una mejor solución es:

SELECT TIMESTAMPDIFF(SECOND, '2010-11-29 13:13:55', '2010-11-29 13:16:55') 

que se pueden modificar para volver DÍA MES AÑO hora y los minutos también!

+0

esta es la mejor solución que la respuesta aceptada, gracias. – Vignesh

+0

mucho más ordenado. debe ser la respuesta aceptada –

+0

es su forma de convertir el resultado en formato hr: min: sec? – coolDude

0

El método TIMESTAMPDIFF solo funciona con el formato de fecha y hora. Si desea que la diferencia entre sólo dos veces como '11: 10: 00' menos '10: 20: 00' , use

select TIME_TO_SEC('11:10:00')-TIME_TO_SEC('10:20:00') 
Cuestiones relacionadas