Cita:
Iniciado por flaviovich
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
Cita: Editado: Movido por resucitar threads obsoletos.
Hola, en el SELECT del @totaldias entiendo que hay que sumarle un 1 al final para que si calculas un año te de 365 dias. Por lo demas va perfecta.
Pero yo me encuentro con un problema tengo un listado con los feriados pero en 2014 en españa y en concreto en mi region 3 de ellos son sabado y no puedo eliminarlos de esta tabla por lo que me los descuenta tanto como feriados como por sabado dandome una diferencia de 3 dias menos, como podria diferenciarlos???
Muchas