2015-06-03 7 views
6

Mam czas kolumny mysql (3) i jest przechowywanie dobrej wartości czasu .. , ale potem chcę zsumować dwa razy, że konwertuje na zły format czasu;Czas MySQL SUM (3) z milisekundami

mam dwa rekordy:

id | time 
---|----------- 
1 | 00:00:15.490 
2 | 00:02:14.900 

więc w rzeczywistym Shoud uzyskać: 00:02:30.390

ale mam 230.390

jest w każdym razie, aby uzyskać prawidłową odpowiedź z MySQL? P.S. Używam php do funkcji, ale nie chcę go używać, chyba że jest inny sposób. Trzeba podsumować razy milisekund

teraz używam zapytanie SELECT SUM(time) AS total_time FROM times WHERE 1

+0

użyj wbudowanej funkcji php date_format(). – Sagar

+0

Prawdopodobny duplikat. Przeczytaj ten artykuł: http://stackoverflow.com/questions/3054943/calculate-sum-time-with-mysql –

+0

możliwy duplikat [oblicz sumę czasu za pomocą sql] (http://stackoverflow.com/ pytania/3054123/oblicz-suma-typu-czasu-używania-sql) –

Odpowiedz

4

Pod twoja definicja tabela jest coś takiego:

create table test (
    id integer, 
    `time` time(3) -- important to specify precision 
); 

Można to zrobić:

select time(sum(`time`)) 
    from test; 

uwaga: wymaga MySQL 5.6+ edit

W rzeczywistości, time jest niewłaściwą funkcją, ponieważ nie ma wielu sprytów.

użycie sec_to_time zamiast tj:

select sec_to_time(sum(`time`)) 
    from test; 

time wydobywa wartość czasu, sec_to_time oblicza wartość czasu - tj time(70) zwraca NULL, ponieważ nie ma ważny czas, który ma 70 sekund, gdzie jako sec_to_time poprawnie powrót '00:01:10' do tego samego wejścia edycji

Okazuje się, że nadal jestem w błędzie. Spróbujmy potraktować milisekundy oddzielnie do końca czasu:

select sec_to_time(sum(time_to_sec(`time`)) + sum(microsecond(`time`))/1000000) 
    from test; 
+0

TAK !!! to jest to czego chce!! Dziękuję Ci bardzo!! Właśnie potrzebowałem czasu przed SUMA !!!! :))) Jestem bardzo szczęśliwy teraz ..; D – Scorpioniz

+0

może możesz mi powiedzieć dlaczego to rozwiązanie dostaje NULL jeśli wartości czasu, które próbuję sumować to total_time '00: 00: 19.020',' 00:00 : 21.990', '00: 00: 30.360' – Scorpioniz

+0

spróbuj użyć' sec_to_time' zamiast 'time'. –

2

Owiń outputted wynik z funkcji czasu. A więc:

time(sum(`time`)) 

gdzie czas jest funkcją czasu, a "czas" to sumowana kolumna.

+0

czy to naprawdę rozwiązanie dla OP.? –

+0

Tak, to było zanim zredagował swój post. – kojow7

+0

jeśli edytował post. musisz przemyśleć i podać inne rozwiązanie. w przeciwnym razie dostaniesz więcej -ve oznaczenie. –