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 original
ALTER 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:
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.Editado: Movido por resucitar threads obsoletos.
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