sqlserver Escribe una función para obtener el número total de días de lunes a viernes entre dos fechas.
go
CREAR FUNCIÓN dbo.f_get_workdays(@bdate DATETIME, @edate DATETIME)
DEVUELVE UN ENTERO
COMO COMENZAR
DECLARAR @workdays INTEGER
SI @bdate >@edate
RETORNO -1
SELECCIONAR @workdays = p>
--Si la fecha de finalización y la fecha de inicio están en la misma semana, simplemente cuente cuántos días hay
CASE CUANDO DATEPART(semana, @edate-1)-DATEPART(semana ,@bdate) = 0 ENTONCES
CASE CUANDO DATEPART(dw, @bdate) > 5 ENTONCES 0
CUANDO DATEPART(dw, @edate-1) > - DATEPART(dw , @bdate)
ELSE DATEPART(dw, @edate-1) - DATEPART(dw, @bdate) + 1 END
-- Si la fecha de finalización y las fechas de inicio son diferentes Dentro de una semana
--Primero calcule el número completo de semanas excepto las dos semanas anteriores y posteriores* 5
ELSE (DATEDIFF(dd. @bdate, @edate))@bdate,@edate )
- (8-DATEPART(dw, @bdate))
- DATEPART(dw, @edate-1)) / 7 * 5
- - Agregue el número de días hábiles en la primera semana
+ CASE WHEN DATEPART(dw, @bdate) < 6 THEN 6 - DATEPART(dw, @bdate)
ELSE 0 END
-- Añade el número de días laborables de la última semana
+ CASE CUANDO DATEPART(dw, @edate-1)>5 ENTONCES 5 ELSE DATEPART(dw, @edate-1) FIN
FIN
RETURN @workdays
END
ir
seleccione dbo.f_get_workdays(dateadd(día,- 21,getdate()),getdate())