Avatar billede tbm_iceman Nybegynder
05. juli 2005 - 09:04 Der er 12 kommentarer og
1 løsning

DateDiff() og timeafregning.

Hej Xperter.

Jeg er ved at lave et time afregnings system.
Vi afregner efter påbegyndt kvarter.

Type:    StartTid:  BeregnetTid:
---------------------------------------
Start    08:11      08:00
Start    10:25      10:15

Slut    09:35      09:45
Slut    16:55      17:00
---------------------------------------

Så det jeg gerne vil lave er en SELECT statement der beregner den tid der skal udfaktureres (BeregnetTid) og returnere den i minutter. Jeg er med på hvordan man bruger DateDiff().
Men kan ikke se en måde at lave det i ren SQL.

Altså fra 08:11 til 09:35 er der jo 7x15mins, kan dette laves?

Min time-tabel ser således ud:
Hours:
------------
id
StartTime
EndTime
Name
Description
------------
Avatar billede terry Ekspert
05. juli 2005 - 19:19 #1
Not quite sure I understand your example!

Why does a startTime of 08:11 have a "BeregnetTid" = 08:00
but EndTime 09:35 have a "BeregnetTid" = 09:45?

Isnt 11 minutes = "påbegyndt kvarter"?
Avatar billede tbm_iceman Nybegynder
05. juli 2005 - 20:01 #2
Hmm... When we start an assignment then we start it at each starting quarter, and when we end then we do the same just to the other side.
It is to facture out more hours.
So you will always as a minimum send a bill on 15mins.
If it start(08:10) and end(08:11) then it will be calculated as 08:00->08:15 = 15mins

Is it possible to do such a calculation in a SQL SELECT?
Avatar billede terry Ekspert
05. juli 2005 - 20:30 #3
I may be able to put something together whcih works in Access but if you intend using the SQL in ASP or maybe VB then I'mnot sure if it will work. If you save it as a query in Access then you should be able to make a SELECT from the query.

Back in five
Avatar billede terry Ekspert
05. juli 2005 - 20:48 #4
SELECT DatePart("h",[ComeTime])*60+DatePart("n",[ComeTime])-DatePart("n",[ComeTime]) Mod 15 AS ComeInMinutes, DatePart("h",[GoTime])*60+((DatePart("n",[GoTime])+14)-(DatePart("n",[GoTime])+14) Mod 15) AS GoInMinutes, [GoInMinutes]-[ComeInMinutes] AS DiffMinutes
FROM tblComeGo;


THis is based on a table named tblComeGo which has two fields ComeTime and GoTime
Avatar billede terry Ekspert
05. juli 2005 - 20:49 #5
I have NOT tested so much so you need to do that yourself
Avatar billede tbm_iceman Nybegynder
05. juli 2005 - 21:00 #6
hmm, not gonna work if the end time is something like 23:55 (24:00) which is calculated as 00:00 so you will get a wrong output.
But almost good. I did something like that in ASP, but this one takes care of the 00:00 problem:

TotalMins  = ABS(DateDiff("n", StartTime, EndTime))
dHours    = TotalMins \ 60
dMinutes  = TotalMins mod 60
Avatar billede tbm_iceman Nybegynder
05. juli 2005 - 21:03 #7
Oups... wrong function I meant to send this:

Function GetRealQuarters(Mode,Input)
    GetRealQuarters = ""

    If IsDate(Input) Then
        Dim Result, intMinute
        intMinute = Minute(Input)
       
        Select Case Mode
            Case "start":
                Result = 15*(intMinute\15)
            Case "end":
                If intMinute mod 15 > 0 Then
                    Result = 15*((intMinute\15)+1)
                Else
                    Result = 15*(intMinute\15)
                End If
        End Select

        If Hour(Input) = 23 And Result = 60 Then
            GetRealQuarters = cDate(DateSerial(Year(Input),Month(Input),Day(Input)+1) & " 00:00:00")
        Else
            GetRealQuarters = cDate(DateSerial(Year(Input),Month(Input),Day(Input)) & " " & TimeSerial(Hour(Input), Result, 0))little
        End If
    End If
End Function
Avatar billede terry Ekspert
05. juli 2005 - 21:05 #8
The query changes 23:55 to 1440 minutes!
Avatar billede terry Ekspert
05. juli 2005 - 21:06 #9
I think you should try the query
Avatar billede tbm_iceman Nybegynder
05. juli 2005 - 21:13 #10
Sorry you are right.
Plz post another answer.
Avatar billede terry Ekspert
05. juli 2005 - 21:21 #11
:o)
Avatar billede terry Ekspert
05. juli 2005 - 21:22 #12
and if you add a new column to your query

((CLng([GoInMinutes]-[ComeInMinutes])/60) Mod 60) & ":" & ([GoInMinutes]-[ComeInMinutes]) Mod 60 AS HoursMinutes

you get to see hours and minutes
Avatar billede terry Ekspert
05. juli 2005 - 22:23 #13
thanks :o)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Dyk ned i databasernes verden på et af vores praksisnære Access-kurser

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester