Dette udtryk -
5 * (DATEDIFF(@E, @S) DIV 7) + MID('01234444401233334012222340111123400012345001234550', 7 * WEEKDAY(@S) + EWEEKDAY> + WEEKDAY>-kode
beregner antallet af hverdage mellem startdatoen @S og slutdatoen @E.
Antager, at slutdatoen (@E) ikke er før startdatoen (@S). Kompatibel med DATEDIFF, idet den samme startdato og slutdato giver nul arbejdsdage. Ignorerer helligdage.
Cifferstrengen er opbygget som følger. Opret en tabel over startdage og slutdage, rækkerne skal starte med mandag (WEEKDAY0), og kolonnerne skal også starte med mandag. Udfyld diagonalen fra øverst til venstre til nederst til højre med alle 0 (dvs. der er 0 arbejdsdage mellem mandag og mandag, tirsdag og tirsdag osv.). For hver dag skal du starte ved diagonalen (skal altid være 0) og udfylde kolonnerne til ja, en dag ad gangen. Hvis du lander på en weekenddag (ikke-arbejdsdag) kolonne, ændres antallet af arbejdsdage ikke, det føres fra venstre. Ellers øges antallet af hverdage med én. Når du når slutningen af rækken, går du tilbage til begyndelsen af den samme række og fortsæt, indtil du når diagonalen igen. Fortsæt derefter til næste række.
For eksempel. Forudsat at lørdag og søndag ikke er hverdage -
| M T W T F S S-|--------------M| 0 1 2 3 4 4 4T| 4 0 1 2 3 3 3W| 3 4 0 1 2 2 2T| 2 3 4 0 1 1 1F| 1 2 3 4 0 0 0S| 1 2 3 4 5 0 0S| 1 2 3 4 5 5 0
Sammensæt derefter de 49 værdier i tabellen i strengen.
Fortæl mig venligst, hvis du finder nogen fejl.
-Redigeringsforbedret tabel:
| M T W T F S S-|-------------M| 0 1 2 3 4 4 4T| 4 0 1 2 3 3 3W| 3 4 0 1 2 2 2T| 2 3 4 0 1 1 1F| 1 2 3 4 0 0 0S| 0 1 2 3 4 0 0S| 0 1 2 3 4 4 0
forbedret streng:'01234444012333334012222340111123400001234000123440'
forbedret udtryk:
5 * (DATEDIFF(@E, @S) DIV 7) + MID('01234444401233334012222340111123400001234000123440', 7 * WEEKDAY(@S) + EWEEKDAY> + WEEKDAY>-kode