Esta funcion la encontre en la red. La adapte a mis necesidades. Te daras cuenta que tengo una tabla Feriados tal como lo dijo Nano_.
Código SQL:
Ver originalALTER FUNCTION [dbo].[DiasLaborables]
(
@fch_ini DATETIME,
@fch_fin DATETIME
)
RETURNS DECIMAL(6,1)
AS
BEGIN
DECLARE @TotalDias DECIMAL(6,1) --Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas
DECLARE @DiasNoLaborables INT --Con esta variable acumulamos los dias no laborables
DECLARE @DiasFeriados SMALLINT --Total dias feriados entre el rango de fechas
DECLARE @Cnt INT --esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango
DECLARE @EvalDate DATETIME --esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo
SET @Cnt = 0
SET @DiasNoLaborables = 0
--Calculamos cuantos dias normales hay en el rango de fechas
SELECT @TotalDias = DATEDIFF(HOUR,@fch_ini,@fch_fin) / 24.0--Se maneja diferencia de dias a nivel horas
SELECT @DiasFeriados = COUNT(1) FROM Feriados WHERE fch_feriado >= @fch_ini AND fch_feriado <= @fch_fin
WHILE @Cnt < @TotalDias
BEGIN
SELECT @EvalDate = @fch_ini + @Cnt
IF datepart(dw,@EvalDate) = 6 OR datepart(dw,@EvalDate) = 7
BEGIN
SET @DiasNoLaborables = @DiasNoLaborables + 1
END
SET @Cnt = @Cnt + 1
END
RETURN (@TotalDias - @DiasNoLaborables - @DiasFeriados)
END