2010-08-22 15 views
5

Pensé que esto sería una cosa muy simple, ¡pero estoy teniendo dificultades para encontrar respuestas!restar marcas de tiempo

Tengo una tabla de soporte, con added_on y closed_on campos que rastrean cuando se abrieron y cerraron los tickets de soporte.

Me gustaría ejecutar una consulta que (closed_on - added_on) para mostrar la duración de la apertura de un ticket. Ambos campos tienen el formato timestamp. Esto no es tan simple como pensé que sería ...

Idealmente, la producción final sería X days Y hours Z minutes, pero me gustaría obtener segundos totales o algo así, sin duda lo puedo tomar desde allí.

datos

muestra:

[id] [added_on]    [closed_on] 
1 2010-01-01 00:10:20 2010-01-02 00:10:20 
1 2010-01-03 00:00:01 2010-01-03 13:30:01 

Respuesta

3

Uso:

SELECT CONCAT(DATEDIFF(closed_on, added_on), 
       ' days ', 
       SUBSTRING_INDEX(TIMEDIFF(closed_on, added_on), ':', 1), 
       ' hours ', 
       SUBSTR(TIMEDIFF(closed_on, added_on), INSTR(TIMEDIFF(closed_on, added_on), ':')+1, 2), 
       ' minutes') 

Con los datos del ejemplo, que me da:

0 days 00 hours 00 minutes 
0 days 13 hours 30 minutes 
0

Puede utilizar TIMESTAMPDIFF para obtener la diferencia en segundos:

SELECT TIMESTAMPDIFF(SECOND,closed_on,added_on)...

Editar: Otra manera sería utilizar UNIX_TIMESTAMP:

SELECT UNIX_TIMESTAMP(closed_on)-UNIX_TIMESTAMP(added_on)... 
Cuestiones relacionadas