Red de conocimiento informático - Problemas con los teléfonos móviles - sqlserver Escribe una función para obtener el número total de días de lunes a viernes entre dos fechas.

sqlserver Escribe una función para obtener el número total de días de lunes a viernes entre dos fechas.

Eliminar función dbo.f_get_workdays

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 =

--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())