doorlooptijden zonder weekend

Status
Niet open voor verdere reacties.

tkoning

Gebruiker
Lid geworden
4 sep 2002
Berichten
7
Ik heb de volgende vraag :

Is het mogelijk om de doorlooptijd te berekenen over een bepaalde periode zonder het weekend mee te rekenen.

Begindatum: - Einddatum: Doorlooptijd:

01-01-2004 01-02-2004 ??????????


vriendelijke groet

Tino de Koning:thumb:
 
Daar zijn wel functies voor, maar die maken geen deel uit van standaard SQL, bij mijn weten.

Ik heb het gevoel dat het zou moeten kunnen, maar of je er echt blij van word weet ik niet...

Iets van alle data omrekenen naar getallen, een nulpunt kiezen (bijvoorbeeld een maandag in 1970 ofzo), en dan alle 6e en 7e dagen uitsluiten.

Maarre, ik begin toch wel een beetje te twijfelen of je dit in één SQL statement voor elkaar krijgt. Leuke uitdaging trouwens... :)
 
(Bijna) alles kan in SQL!

Hierbij een functie in Transact SQL die het aantal werkdagen tussen twee datums (de datums worden niet meegeteld) retour geeft:

CREATE FUNCTION dbo.GetWorkingDays
( @StartDate datetime,
@EndDate datetime )
RETURNS INT
AS
BEGIN
DECLARE @WorkDays int, @FirstPart int
DECLARE @FirstNum int, @TotalDays int
DECLARE @LastNum int, @LastPart int
IF (DATEDIFF(day, @StartDate, @EndDate) < 2)
BEGIN
RETURN ( 0 )
END
SELECT
@TotalDays = DATEDIFF(day, @StartDate, @EndDate) - 1,
@FirstPart = CASE DATENAME(weekday, @StartDate)
WHEN 'Sunday' THEN 6
WHEN 'Monday' THEN 5
WHEN 'Tuesday' THEN 4
WHEN 'Wednesday' THEN 3
WHEN 'Thursday' THEN 2
WHEN 'Friday' THEN 1
WHEN 'Saturday' THEN 0
END,
@FirstNum = CASE DATENAME(weekday, @StartDate)
WHEN 'Sunday' THEN 5
WHEN 'Monday' THEN 4
WHEN 'Tuesday' THEN 3
WHEN 'Wednesday' THEN 2
WHEN 'Thursday' THEN 1
WHEN 'Friday' THEN 0
WHEN 'Saturday' THEN 0
END
IF (@TotalDays < @FirstPart)
BEGIN
SELECT @WorkDays = @TotalDays
END
ELSE
BEGIN
SELECT @WorkDays = (@TotalDays - @FirstPart) / 7
SELECT @LastPart = (@TotalDays - @FirstPart) % 7
SELECT @LastNum = CASE
WHEN (@LastPart < 7) AND (@LastPart > 0) THEN @LastPart - 1
ELSE 0
END
SELECT @WorkDays = @WorkDays * 5 + @FirstNum + @LastNum
END
RETURN ( @WorkDays )
END
GO
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan