Berekenen tijdsduur in Access met sql

Status
Niet open voor verdere reacties.

Bouwplaats

Gebruiker
Lid geworden
13 okt 2008
Berichten
6
Ik heb 4 kolommen waarvan ik het verschil in tijd van moet berekenen in Access. Het achterliggende tabel is via een ODBC koppeling tot stand gekomen en daar kan ik de notatie dus niet wijzigen. De kolommen en waarden zijn:


createDate, createTime, updateDate, updateTime
17-4-2007, 942, 24-11-2007, 1500

Graag zou ik als uitkomst willen hebben: 221 dagen, 5:18 h
Mag in twee kolommen.

De gevenstype's zijn: datum/tijd voor de data en numeriek voor de tijdsnotatie.

Ik ben niet zo sterk in SQL en heb op het web al wat queries gevonden, maar weet niet goed hoe ze te combineren. Heb al diverse foutmeldingen om oren gekregen...:o Kan en wil iemand mij een kant en klaar SQL statement geven, waar ik dit mee voor elkaar krijg? Het zou mij een hoop frustratie en hoofdbrekens schelen, alvast bedankt!

Yvette
 
Het aantal dagen tussen twee data is eenvoudig te berekenen met het datediff statement.

Het aantal minuten tussen 942 en 1500 is iets ingewikkelder omdat deze tijd niet door de computer herkend wordt als tijd. Die moet je er dus eerst van maken:
Code:
dateadd("n",(942\100)*60 + 942 mod 100, date())
Het aantal uren vermenigvuldigd met 60 en daarbij opgeteld het aantal minuten. Die we dan weer optellen bij de huidige datum. Dat laatste maakt ons niet uit omdat we alleen geïnteresseerd zijn in de tijd.
Hetzelfde geldt voor die andere tijd.
Code:
dateadd("n",(1500\100)*60 + 1500 mod 100, date())
Je code wordt uitendelijk zoiets als dit
Code:
datediff("n",dateadd("n",(942\100)*60 + 942 mod 100, date()),dateadd("n",(1500\100)*60 + 1500 mod 100, date()))/60
Dan heb je het aantal uren tussen de tijden. (5,3)
Je moet nu nog de 0,3 vermenigvuldigen met 60 seconden. Dan krijg je 5:18

Je code wordt nu
Code:
Cint(datediff("n",dateadd("n",(942\100)*60 + 942 mod 100, date()),dateadd("n",(1500\100)*60 + 1500 mod 100, date()))/60) & ":" _
& (datediff("n",dateadd("n",(942\100)*60 + 942 mod 100, date()),dateadd("n",(1500\100)*60 + 1500 mod 100, date()))/60 * 10 & _
mod 10) * 6

Je kan dit opnemen in je SQL code maar mooier is hiervan een functie maken!

Piece of cake!

HTH:D
 
Laatst bewerkt:
Functie maken?

Hoi Guus,

Dank je voor je uiteenzetting en inspanning :thumb:. Jouw SQL code ga ik straks proberen. Je zegt dat het makkelijker is om er een functie van te maken. Ik neem dat direct van je aan, maarreh.... hoe doe ik dat? :confused:

Thzzzz Yvette
 
Maak een module aan en stop deze functie erin:
Code:
Public Function Elapsed(dtmCreated As Date, lngTimeCreated As Long, dtmUpdated As Date, lngTimeUpdated As Long) As String
'createDate , createTime, updateDate, updateTime
    Dim strRetValDays As String
    Dim strRetValTime As String
    
    If lngTimeCreated < lngTimeUpdated Then
        strRetValDays = DateDiff("d", dtmCreated, dtmUpdated)
        strRetValTime = CInt(DateDiff("n", DateAdd("n", (lngTimeCreated \ 100) * 60 + lngTimeCreated Mod 100, Date), DateAdd("n", (lngTimeUpdated \ 100) * 60 + lngTimeUpdated Mod 100, Date)) / 60) & ":" & (DateDiff("n", DateAdd("n", (lngTimeCreated \ 100) * 60 + lngTimeCreated Mod 100, Date), DateAdd("n", (lngTimeUpdated \ 100) * 60 + lngTimeUpdated Mod 100, Date)) / 60 * 10 Mod 10) * 6
    Else
        strRetValDays = DateDiff("d", dtmCreated, dtmUpdated - 1)
        strRetValTime = CInt(DateDiff("n", DateAdd("n", (lngTimeCreated \ 100) * 60 + lngTimeCreated Mod 100, Date - 1), DateAdd("n", (lngTimeUpdated \ 100) * 60 + lngTimeUpdated Mod 100, Date)) / 60) & ":" & (DateDiff("n", DateAdd("n", (lngTimeCreated \ 100) * 60 + lngTimeCreated Mod 100, Date - 1), DateAdd("n", (lngTimeUpdated \ 100) * 60 + lngTimeUpdated Mod 100, Date)) / 60 * 10 Mod 10) * 6
    End If

    Elapsed = strRetValDays & " dgn, " & strRetValTime & " h"
    
End Function
In je immediate window kan je hem testen
Code:
?elapsed(#17-4-2007#, 942, #24-11-2007#, 1500)
221 dgn, 5:18 h
In je query ziet het er als volgt uit.
Code:
Select createDate , createTime, updateDate, updateTime, Elapsed(createDate , createTime, updateDate, updateTime) as Elapsed from Tabel
HTH:D
 
Sorry Guus,

Ik voel mij echt een Dummie op het ogenblik. Ik heb de code als SQL ingevoerd, maar krijg foutmeldingen:

SELECT dbo_ASCL.callID, dbo_ASCL.custmrName, [firstName] & [lastName] AS Medewerker, DateDiff("d",createDate,updateDate) AS Dagen,
([updateDate]-[createDate])*24 AS Uren,
Cint(datediff("n",dateadd("n",(createTime\100)*60 + createTime mod 100, date()),dateadd("n",(updateTime\100)*60 + updateTime mod 100, date())
/60)) & ":" _& (datediff("n",dateadd("n",(createTime\100)*60 + createTime mod 100, date()),dateadd("n",(updateTime\100)*60 + updateTime mod 100,
date()))/60 * 10 & _mod 10) * 6 AS Tijd,

dbo_ASCL.createDate, dbo_ASCL.createTime, dbo_ASCL.updateDate, dbo_ASCL.UpdateTime, dbo_ASCL.status
FROM dbo_ASCL INNER JOIN dbo_OHEM ON dbo_ASCL.technician = dbo_OHEM.empID
WHERE (((dbo_ASCL.status)=2));

Functie krijg ik wel in een module gepropt, maar immediate window zegt mij al niets en hoe ik dan aan een query verbonden krijg al helemaal niet. Wil je mij aan het handje meenemen ajb? :o

Groeten,

YVette
 
geef jij mij een (sample)database met die tabel, dan krijg jij van mij een werkend voorbeeld.
 
Hoi Guus,

Dat zou geweldig zijn!!!! :thumb: :thumb: :thumb:

Ik heb een kopie van de database gemaakt met wat voorbeeldregels, ik hoop dat het werkt!

Groeten,

Yvette
 

Bijlagen

Hoi Guus,

Tof dat je het hebt willen doen voor mij. Heb ik eindelijk tijd om er mee aan de slag te gaan; heb ik een andere uitdaging; als ik de file download, opsla en wil extracten geeft hij aan dat er niets te extracten valt...Uitpakken met winrar geeft ook een file zonder extentie?! Gewoon openen geeft de melding corrupt.
Doe ik iets fout of wellicht iets fout gegaan met uploaden?

Groeten Yvette
 
Nee je doet niets verkeerd. Er zijn meerdere mensen die problemen hebben met het uitpakken van met name zip bestanden. Soms gaat het ook met rar bestanden niet goed. Waar het aan ligt is me nog steeds niet duidelijk. Ik heb er last van op verschillende computers. Op een ander forum heb ik er geen last van. Noch met Uploaden noch met downloaden.

mvg
Charles
 
Shoot!

Ik zat al te twijfelen of ik gewoon de query zou posten of de hele database. Ik had voor de eerste moeten kiezen.

Ik kom er nog op terug. Zal vanavond worden.

Het lukt me hier namelijk ook niet.
 
De query:
Code:
SELECT dbo_ASCL.callID, dbo_ASCL.custmrName, dbo_OHEM.lastName, dbo_ASCL.createDate, dbo_ASCL.createTime, dbo_ASCL.updateDate, dbo_ASCL.UpdateTime, Elapsed([Createdate],[createTime],[UpdateDate],[Updatetime]) AS Elapsed
FROM dbo_ASCL INNER JOIN dbo_OHEM ON dbo_ASCL.technician=dbo_OHEM.empID
WHERE (((dbo_ASCL.status)=2));
en wellicht ten overvloede je dartabase in rar formaat.

Enjoy!
 

Bijlagen

Beste Guus,

:thumb::thumb::thumb:Je bent GEWELDIG! :thumb::thumb::thumb:​
WinRar filetje werkt gewoon goed, ga alles even overzetten naar de live database. Daarna alles nalezen en kijken of ik het de volgende x wellicht zelf zou kunnen...

Dank je wel!

Yvette
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan