01. april 2004 - 09:22Der er
22 kommentarer og 3 løsninger
Antal dage uden weekend
Hej
Jeg har en tabel med en start og en slut dato.
Jeg skal nu tælle hvor mange dage der er mellem de 2 datoer. Det gør jeg således:
SELECT (slut-start)+1 AS antal FROM dato; Og det virker fint, men den skal ikke tælle lørdag/søndag med. Kan det klares i et udtræk ? Har kigget lidt på datediff, men kan ikke rigtig finde noget brugbart.
Public Function Arbejdsdag(Dato As Date) As Boolean If Weekday(Dato) = 7 Or Weekday(Dato) = 1 Then Arbejdsdag = False Else Arbejdsdag = True End If End Function
Public Function FindAntalArbejdsdage(Startdato As Date, Slutdato As Date) As Long Dim tmpDato As Date Dim n As Integer tmpDato = Startdato Do Until tmpDato >= Slutdato If Arbejdsdag(tmpDato) Then n = n + 1 End If tmpDato = tmpDato + 1 Loop FindAntalArbejdsdage = n End Function
Herefter kan du bruge FindAntalArbejdsdage(Startdato, Slutdato) til at finde antallet (uden helligdage)
SELECT Count(Tabel1.Dato) AS AntalOfDato, Format([Dato],"ddd") AS Ugedag FROM Tabel1 GROUP BY Format([Dato],"ddd") HAVING (((Format([Dato],"ddd")) Not In ("lø","sø")));
Hvis du vil tage hensyn til helligdage, skal du oprette en tabel, med én kolonne, som hedder "Dato". Tabellen kaldes "Helligdage".
Herefter udskifter du funktionen Arbejdsdag med denne:
Public Function Arbejdsdag(Dato As Date) As Boolean If Weekday(Dato) = 7 Or Weekday(Dato) = 1 Then Arbejdsdag = False ElseIf DCount("*", "Helligdage", "Dato = #" & Format(Dato, "yyyy-mm-dd") & "#") > 0 Then Arbejdsdag = False Else Arbejdsdag = True End If End Function
Som Thomas skriver, skal du have en ekstra tabel hvor du angiver helligdagene, og så kan forespørgslen se således ud :
SELECT Count(Tabel1.Dato) AS AntalOfDato FROM Tabel1 LEFT JOIN Helligdage ON Tabel1.Dato = Helligdage.HDato WHERE (((Helligdage.HDato) Is Null) AND ((Format([Dato],"ddd")) Not In ("lø","sø")));
SELECT Count(Tabel1.Dato) AS DatoAntal FROM Tabel1 LEFT JOIN Helligdage ON Tabel1.Dato = Helligdage.HDato WHERE (((Tabel1.Dato) Between [StartDato:] And [SlutDato:]) AND ((Helligdage.HDato) Is Null) AND ((Format([Dato],"ddd")) Not In ("lø","sø")));
Det er een og samme tabel/felt som der henvises til. Between [StartDato:] And [SlutDato:]) er to variabler som aktiveres når forespørgslen genereres, dvs. du skal så indtaste dato-intervallet som der skal søges på ;)
hindu... OK, but then why reject my answer and not others? and I very much doubt that you can do it in pure SQL! You MUST use some functions to find days which are saturday and sunday!
Forsøgte at følge linket, men desværre... Har du stadig koden, og vil du evt. gøre den tilgængelig eller E-maile den til mig?
Synes godt om
Ny brugerNybegynder
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.