Summa tid
24 svar · 598 visningar · startad av joel_joel88
DBMS?
Jag kör med access till det här. Det går inte använda vanlig sum va?
Jag förmodar att du avser att summera tidsintervall och inte tidsangivelser. Lagra det som minuter(sekunder) och summera som vanligt.
Har gjort ett program i VB där jag matar in flygtid. Jag vill kunna summera flygtiden.
Jag skriver flyg tiden så här. TT:MM:SS
select sum(cint(mid(tc,1,2))*3600+cint(mid(tc,4,2))*60+cint(mid(tc,7,2)) from t
om du inte lagrar det som sekunder.
Jag får ett felmeddelande som säger att en operator saknas :o
Set rs = connect.Execute("select sum(cint(mid(flygtid,1,2))*3600+cint(mid(flygtid,4,2))*60+cint(mid(flygtid, 7,2)) as summa from flygtid")
Ser inte så ut i min kod. datatypen är datum/tid.
Det kanske inte går så bra att göra mid på en sådan typ.
Om du testar
Set rs = connect.Execute("select sum(cint(mid(cstr(flygtid),1,2))*3600) from flygtid")
Nu får jag inget felmeddelande men summan blir 0 :o
Någon som vet vad det kan vara för fel när jag får summan 0 även fast det är inmatade tider?
Ingen som vet eller har ni glömt bort tråden? :)
För mig resulterar följande
select sum(mid(flygtid,1,2))*3600 from flygtid
...med detta innehåll i 'flygtid'
flygtid
10:10:12
12:35:01
15:00:10
06:34:17
09:56:59
...i
187 200
så ska det ju inte vara. Jag vill summera flygtiden så att resultatet blir i det här formatat.
Ex. Altså 20 timmar och 40 min.
20:40
Med
select sum(mid(flygtid,1,2))*3600 + sum(mid(flygtid,4,2))*60 + sum(mid(flygtid,7,2)) as summa from flygtid
...får du ut den totala summeringen i sekunder. Det talet kan du sedan transfomera i ASP/VBScript till det format du vill ha.
Anledningen till att Lars kod gav ett felmeddelande är att det saknas en avslutande parentes efter '7,2))':
select sum(cint(mid(flygtid,1,2))*3600+cint(mid(flygtid,4,2))*60+cint(mid(flygtid, 7,2))) as summa from flygtid
Lite snyggare än mitt förslag :)
Ok, tack. Men det måste finnas någon smidig funktion för att få ut summan av tiden. Det måste ju vara rätt vanligt att man vill göra det. Om inte hur gör jag om det så jag får det här formatet, TT:MM.
Vi kan börja med att förenkla ytterligare. Mid() kan ersättas med Hour(), Minute() och Second():
select sum(hour(flygtid)*3600+minute(flygtid)*60+second(flygtid)) as summa from flygtid
Sedan:
a = cint(rs("summa"))
'timmar
h = round(a / 3600 - 0.5)
'minuter
m = round((a / 3600 - h) * 60 - 0.5)
Tackar nu fungerar det...nästan. Jag har nu totalt 1 timme och 20 minuter i databasen fast det skrivs ut som 1:19. Är det så att denna kod avrundar neråt och hur fixar jagså att det blir rätT?