2011-03-11 111 views
9

Ésta es mi consulta:MySQL convertir TIMEDIFF salida a día, hora, minuto, segundo formato

SELECT TIMEDIFF(end_time,start_time) AS "total" FROM `metrics`; 

que me da:

116:12:10 

que significa 116 horas, 12 minutos y 10 segundos.

En su lugar, lo quiero decir 4 días 20 horas, 12 minutos, etc.

+0

No estoy seguro de si hay alguna función incorporada para eso o no, creo que se puede hacer mediante la aplicación de las matemáticas simples ... –

Respuesta

22
SELECT CONCAT(
FLOOR(HOUR(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30'))/24), ' days ', 
MOD(HOUR(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30')), 24), ' hours ', 
MINUTE(TIMEDIFF('2010-01-06 08:46', '2010-01-01 12:30')), ' minutes') 

Use su hora_final y hora_inicial para los valores de fecha y hora fija en mi ejemplo

De acuerdo con los dos comentarios a continuación, esta solución solo funciona para las diferencias de fecha dentro de los 35 días. Si sabe que hay más de 35 días entre el inicio y el final, es decir, diferencias en un mes, no lo use. Otras respuestas aquí usando TIMESTAMPDIFF funcionarán.

+4

@richard: la consulta fallará por mucho tiempo dates.read diferencia que esto http : //www.microshell.com/database/mysql/getting-around-mysql-timediff-maximum-value-of-8385959/ – Gowri

+0

Esta función fallará con estas entradas: SELECT CONCAT ( FLOOR (HOUR (TIMEDIFF ('2010 -03-06 08:46 ',' 2010-01-01 12:30 '))/24),' days ', MOD (HOUR (TIMEDIFF (' 2010-03-06 08:46 ',' 2010- 01-01 12:30 ')), 24),' horas ', MINUTO (TIMEDIFF (' 2010-03-06 08:46 ',' 2010-01-01 12:30 ')),' minutos ' – nono

12
SELECT 
CONCAT(
TIMESTAMPDIFF(day,'2001-01-01 00:00:00','2001-01-02 23:10:00') , ' dagen ', 
MOD(TIMESTAMPDIFF(hour,'2001-01-01 00:00:00','2001-01-02 23:10:00'), 24), ' uren ', 
MOD(TIMESTAMPDIFF(minute,'2001-01-01 00:00:00','2001-01-02 23:10:00'), 60), ' minuten ' 
) 
Cuestiones relacionadas