webForumDet fria alternativet

Summa tid

Databaser & SQL

24 svar · 598 visningar · startad av joel_joel88

Medlem sedan nov. 20021 222 inlägg
Frågan#1

Hej!

Hur gör jag för att summera tid som ligger i datum/tid tabell?

Medlem sedan dec. 20025 483 inlägg
#2

DBMS?

Medlem sedan nov. 20021 222 inlägg
#3

Jag kör med access till det här. Det går inte använda vanlig sum va?

Medlem sedan dec. 200012 464 inlägg
#4

Jag förmodar att du avser att summera tidsintervall och inte tidsangivelser. Lagra det som minuter(sekunder) och summera som vanligt.

Medlem sedan nov. 20021 222 inlägg
#5

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

Medlem sedan dec. 200012 464 inlägg
#6
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.

Medlem sedan nov. 20021 222 inlägg
#7

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")
Medlem sedan dec. 200012 464 inlägg
#8
ci  nt

Ser det ut så där i din fråga? Vad har du för datatyp i kolumnen?

Medlem sedan nov. 20021 222 inlägg
#9

Ser inte så ut i min kod. datatypen är datum/tid.

Medlem sedan dec. 200012 464 inlägg
#10

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")
Medlem sedan nov. 20021 222 inlägg
#11

Nu får jag inget felmeddelande men summan blir 0 :o

Medlem sedan nov. 20021 222 inlägg
#12

Någon som vet vad det kan vara för fel när jag får summan 0 även fast det är inmatade tider?

Medlem sedan nov. 20021 222 inlägg
#13

Ingen som vet eller har ni glömt bort tråden? :)

Medlem sedan dec. 20025 483 inlägg
#14

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
Medlem sedan nov. 20021 222 inlägg
#15

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

Medlem sedan dec. 20025 483 inlägg
#16

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.

Medlem sedan dec. 20025 483 inlägg
#17

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 :)

Medlem sedan nov. 20021 222 inlägg
#18

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.

Medlem sedan dec. 20025 483 inlägg
#19

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)
Medlem sedan nov. 20021 222 inlägg
#20

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?

252 ms totalt · 4 externa anrop · v20260731065814-full.1dc6f849
127 ms — deklarationer (db)
0 ms — hämta statistik (cache)
123 ms — hämta tråd, inlägg och bilagor (db)
127 ms — ändringar (db)