2010-06-16 13 views
21

Cómo caculate suma de los tiempos de mi colonne llamado "timeSpent" que tiene este formato: HH: mm en SQL? Estoy usando MySQL.calcular una suma de los tiempos de texto utilizando SQL

el tipo de mi columna es el tiempo.

que tiene esta estructura

 
TimeFrom like 10:00:00   12:00:00  02:00:00 
TimeUntil  08:00:00   09:15:00  01:15:00 
Time spent  

total time 03:15:00 
+0

RDBMS: mysql. la consulta de selección SUM (timespent) de MyTableName doen't trabajo como yo quiero, si la suma es 02: 10:30 Se muestra 021030. – kawtousse

+0

quiere decir u tiene 2 cols TimeFrom y el tiempo hasta? ¿Cuál es tu base de datos? 'SELECT sum (DATEDIFF (minute, timeFrom, timeUntil)) from TableName' – Inv3r53

+0

es causado por el tipo de hora. necesita una función específica que no sé, por favor ayuda. – kawtousse

Respuesta

0

Si el tipo de datos de la columna de timeSpent es TIME usted debería ser capaz de utilizar la siguiente consulta:

SELECT SUM(timeSpent) 
    FROM YourTableName -- replace YourTableName with the actual table name 

Sin embargo, si ese no es el caso , es posible que deba usar un molde para convertir al tipo de datos Time. Algo como esto debería funcionar:

SELECT SUM(timeSpent - CAST('0:0:0' as TIME)) 
    FROM YourTableName -- replace YourTableName with the actual table name 
+0

no, no exactamente esto se ejecuta una excepción – kawtousse

+0

hmm .. puede publicar la definición de la tabla y la consulta que tiene hasta ahora? –

0

En MySQL, se haría algo como esto para conseguir el intervalo de tiempo:

SELECT TIMEDIFF('08:00:00', '10:00:00'); 

Luego añadir los intervalos de tiempo, puede hacer:

SELECT ADDTIME('01:00:00', '01:30:00'); 

Desafortunadamente, no está almacenando fechas o usando la hora de 24 horas, por lo que estos cálculos terminarían siendo incorrectos ya que su TimeUntil es en realidad más bajo que su TimeFrom.

Otro enfoque sería (suponiendo a resolver el problema anterior) para almacenar los intervalos de tiempo en segundos utilizando TIMESTAMPDIFF():

UPDATE my_table SET time_spent=TIMESTAMPDIFF(start, end)); 
SELECT SEC_TO_TIME(SUM(time_spent)) FROM my_table; 
50
SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(`timeSpent`))) AS timeSum 
FROM YourTableName 

Esto funcionó para mí. Espero que esto ayude.

código de trabajo
+0

Me llevó mucho buscar en la web y esta fue la respuesta que estaba buscando. ¡Gracias! – Sevenearths

+0

Gracias, esta es la respuesta correcta –

+0

esto producirá un resultado incorrecto. –

1

100% para conseguir suma de tiempo de espera de base de datos MySQL:

SELECT 
SEC_TO_TIME(SUM(time_to_sec(`db`.`tablename`))) 
As timeSum 
FROM 
`tablename` 

Probar y confirmar. Gracias.

Cuestiones relacionadas