2017-09-23 3 views
2

Je suis à la recherche d'une chaîne (mysql) qui pourrait totaliser quelques heures.minutes pour un temps total correct. Je ne trouve rien de bon.SUM heures.minutes comme total heures correctes.minutes

Exemple:

id| time_spent| 
1 | 10.15  | 
2 | 10.15  | 
3 | 10.15  | 
4 | 10.15  | 
5 | 10.15  | 

Je peux résumer en:

Select sum(time_spent) as total_hours from table 

mais le résultat est: 50:75, mais devrait être comme 51:15

J'ai essayé aussi ceci:

SELECT SEC_TO_TIME(SUM(SEC_TO_TIME(`time_spent`))) 
AS total_time FROM table 

mais le résultat est: 00:00:50

SELECT SEC_TO_TIME(SUM(SECOND(time_spent))) AS total_time FROM 
table 

mais le résultat est: 00: 00: 50,750000

Y at-il possible d'obtenir un hours.minutes total correct de ces enregistrements ci-dessus?

+1

De quel type est 'time_spent'? – BenM

+0

Juste une faute de frappe, je suppose. 'SEC_TO_TIME (SUM (SEC_TO_TIME (' time_spent'))) 'devrait être' SEC_TO_TIME (SUM (TIME_TO_SEC ('time_spent')))'. –

+0

time_spent est un varchar. –

Répondre

1
DROP TABLE IF EXISTS my_table; 

CREATE TABLE my_table (id INT NOT NULL AUTO_INCREMENT PRIMARY KEY, t TIME NOT NULL); 

INSERT INTO my_table (t) VALUES 
('10:15:00'), 
('10:15:00'), 
('10:15:00'), 
('10:15:00'), 
('10:15:00'); 

SELECT SEC_TO_TIME(SUM(TIME_TO_SEC(t))) x FROM my_table; 
+----------+ 
| x  | 
+----------+ 
| 51:15:00 | 
+----------+ 
1

Ma suggestion serait également utiliser un type de données correspond le (comme time). Mais si vous êtes bloqué avec cette idée d'avoir un varchar, vous pouvez convertir votre temps en secondes, le résumer et le convertir.

TIME_TO_SEC s'attendrait au format HH: MM, mais vous avez une fantaisie virgule flottante là, donc votre meilleur coup serait Analyse syntaxique:

TIME_TO_SEC(SUM(STR_TO_DATE(time_spent,'%H.%i')));