/* función para determinar si un día es festivo trabaja en conjunto con dbo.GetBusinessDays para calcular la diferencia en días hábiles entre dos fechas */ CREATE function dbo.IsDateAHoliday ( @CurDate datetime ) returns int as begin declare @ret int select @ret = 0 select @ret = case /* el datepart(mm,@CurDate) es la parte del mes datepart(dd,@CurDate) es la parte del día -para dar de alta un día festivo se pone un when con el mes y el día que se necesite */ when datepart(mm,@CurDate) = 1 and datepart(dd,@CurDate) = 1 then 1 --año nuevo when datepart(mm,@CurDate) = 16 and datepart(dd,@CurDate) = 1 then 1 --indep. when datepart(mm,@CurDate) = 12 and datepart(dd,@CurDate) = 25 then 1 --navidad else 0 end return @ret
Y ahora la función para calcular la diferencia
create function dbo.GetBusinessDays ( @StartDate datetime, @EndDate datetime ) returns int as begin declare @factor int set @factor = 1 if @StartDate > @EndDate begin declare @tempo datetime set @tempo = @StartDate set @StartDate=@EndDate set @EndDate=@tempo set @factor=-1 end declare @DaysBetween int declare @BusinessDays int declare @Cnt int declare @EvalDate datetime select @DaysBetween = 0 select @BusinessDays = 0 select @Cnt=0 select @DaysBetween = datediff(Day,@StartDate,@endDate) + 1 while @Cnt < @DaysBetween begin select @EvalDate = @StartDate + @Cnt if (dbo.IsDateAHoliday(@EvalDate) = 0) BEGIN if ((datepart(dw,@EvalDate) <> 1) and (datepart(dw,@EvalDate) <> 7)) BEGIN select @BusinessDays = @BusinessDays + 1 END END select @Cnt = @Cnt + 1 end return (@BusinessDays*@factor) end
Espero que les sirva.
No hay comentarios:
Publicar un comentario