Ver Mensaje Individual
  #3 (permalink)  
Antiguo 06/10/2010, 16:01
Avatar de flaviovich
flaviovich
 
Fecha de Ingreso: agosto-2005
Ubicación: Lima, Peru
Mensajes: 2.951
Antigüedad: 19 años, 3 meses
Puntos: 39
Respuesta: dias habiles sin sab y dom ni dias festivos

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
  1. ALTER FUNCTION [dbo].[DiasLaborables]
  2. (
  3.     @fch_ini DATETIME,
  4.     @fch_fin DATETIME
  5. )
  6. RETURNS DECIMAL(6,1)
  7. AS
  8. BEGIN
  9.  
  10. DECLARE @TotalDias  DECIMAL(6,1) --Con esta variable calculamos cuantos dias "normales" hay en el rango de fechas
  11. DECLARE @DiasNoLaborables INT --Con esta variable acumulamos los dias no laborables
  12. DECLARE @DiasFeriados SMALLINT --Total dias feriados entre el rango de fechas
  13. DECLARE @Cnt INT --esta variable nos sirve de contador para saber cuando lleguemos al ultimo dia del rango
  14. DECLARE @EvalDate DATETIME --esta variable es la que comparamos para saber si el dia que esta calculando es sábado o domingo
  15.  
  16. SET @Cnt = 0
  17. SET @DiasNoLaborables = 0
  18.  
  19. --Calculamos cuantos dias normales hay en el rango de fechas
  20. SELECT @TotalDias = DATEDIFF(HOUR,@fch_ini,@fch_fin) / 24.0--Se maneja diferencia de dias a nivel horas
  21.  
  22. SELECT @DiasFeriados = COUNT(1) FROM Feriados WHERE fch_feriado >= @fch_ini AND fch_feriado <= @fch_fin
  23.  
  24. WHILE @Cnt < @TotalDias
  25. BEGIN
  26.     SELECT @EvalDate = @fch_ini + @Cnt
  27.  
  28.     IF datepart(dw,@EvalDate) = 6 OR datepart(dw,@EvalDate) = 7
  29.     BEGIN
  30.         SET @DiasNoLaborables = @DiasNoLaborables + 1
  31.     END
  32.  
  33.     SET @Cnt = @Cnt + 1
  34. END
  35.  
  36. RETURN (@TotalDias - @DiasNoLaborables - @DiasFeriados)
  37.  
  38. END
__________________
No repitamos temas, usemos el Motor de busquedas
Plantea bien tu problema: Ayúdanos a ayudarte.