2010-06-16 5 views
21

Comment calculer la somme des temps de ma colonne appelée "timeSpent" ayant ce format: HH: mm en SQL? J'utilise MySQL.calculer une somme de type temps en utilisant sql

le type de ma colonne est Heure.

il a cette structure

 
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

SGBDR: mysql. la requête sélectionnez SUM (timespent) de mytablename ne fonctionne pas comme je le veux si la somme est 02: 10:30 il est affiché 021030. – kawtousse

+0

vous voulez dire que vous avez 2 cols timefrom et temps jusqu'à? Quelle est votre base de données? 'SELECT somme (DATEDIFF (minute, timeFrom, timeUntil)) de TableName' – Inv3r53

+0

il est provoqué par le type heure. il a besoin d'une fonction spécifique je ne sais pas s'il vous plaît aider. – kawtousse

Répondre

0

Si le type de données de la colonne timeSpent est TIME vous devriez être en mesure d'utiliser la requête suivante:

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

Cependant, si ce n'est pas le cas , vous devrez peut-être utiliser une conversion pour convertir le type de données Time. Quelque chose comme cela devrait fonctionner:

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

non pas exactement cela fonctionne une exception – kawtousse

+0

hmm .. pouvez-vous poster la définition de la table et la requête que vous avez jusqu'à présent? –

0

MySQL, vous feriez quelque chose comme ça pour obtenir l'intervalle de temps:

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

Puis ajouter les intervalles de temps, vous feriez:

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

Malheureusement, vous ne stockez pas de dates ou n'utilisez pas l'heure de 24 heures, donc ces calculs seraient incorrects puisque votre TimeUntil est actuellement inférieur à votre TimeFrom.

Une autre approche serait (en supposant que vous triez la question ci-dessus) pour stocker les intervalles de temps en secondes à l'aide 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 

Cela a fonctionné pour moi. J'espère que cela t'aides.

+0

Il a fallu beaucoup de recherche sur le Web et c'était la réponse que je recherchais. Merci! – Sevenearths

+0

Merci, c'est la bonne réponse –

+0

cela produira un mauvais résultat. –

1

100% Code de travail pour obtenir la somme de temps hors de la base de données MYSQL:

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

Essayez et confirmer. Merci.

Questions connexes