2012-03-27 23 views
6

Tengo una tabla Mysql que almacena las fechas en el formato (AAAA-MM-DD HH: MM: SS).Mysql SEC_TO_TIME sin segundos posteriores - Solución encontrada

Lo que quiero es sumar los HH: SS parte de las filas seleccionadas, con el fin he encontrado en otro post yo uso la consulta

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(date))) FROM table 

funciona Esta consulta: MM. Suma la parte que quiero y la devuelve en el formato HH: MM: SS.

Mi pregunta es si es posible quitar los segundos del resultado.

Tengo que hacer esto en la consulta, ya que el CMS que uso no me permite usar php en esta parte.

Por cierto sería increíble si pudiera devolver el resultado en días, horas y minutos en caso de que la suma sea mayor que 24 horas.

Gracias de antemano

para cualquier persona interesada he encontrado la solución

SELECT TIME_FORMAT(SEC_TO_TIME(SUM(TIME_TO_SEC(hours))),'%H:%i') FROM table 
+0

¿Puede dar algunos ejemplos de entradas/salidas? –

+0

En la tabla tengo dos filas con los datos '2012-03-27 01:05:00' y '2012-03-27 17:00:00'. La consulta anterior devuelve '18: 05: 00 ', que es correcta, pero lo que quiero es devolver '18: 05' – tliokos

Respuesta

1

Intentar esta consulta, se calculará días, horas y minutos -

SELECT 
    SUM(TIME_TO_SEC(date) DIV 86400) days, 
    SUM(EXTRACT(HOUR FROM (SEC_TO_TIME(TIME_TO_SEC(date) % 86400)))) hours, 
    SUM(EXTRACT(MINUTE FROM (SEC_TO_TIME(TIME_TO_SEC(date) % 86400)))) minutes 
FROM table 

Entonces utilizar CONCAT función para formatear estos resultados en una cadena.

+0

Gracias, pero desafortunadamente no funciona. Todavía el mismo resultado – tliokos

+0

He cambiado la respuesta. – Devart

+0

Muchas gracias. Funciona aunque estoy luchando para que CONCAT funcione. – tliokos

-1
SELECT SUBSTR(SEC_TO_TIME(1001),2,7); 

es la salida

0:16:41 
+0

No es bueno. Esto elimina el primer dígito de la hora y deja los segundos pulg. – trincot

+0

'SEC_TO_TIME (24 * 3600 * 10) = 240: 00: 00' cambiará a' 40: 00: 0' –

2

Una solución eficaz es cortar los 3 últimos caracteres:

SELECT SUBSTRING(SEC_TO_TIME(seconds), 1, 5); 
Cuestiones relacionadas