Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Dias habiles sin sab y dom ni dias festivos

Estas en el tema de Dias habiles sin sab y dom ni dias festivos en el foro de SQL Server en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 28/10/2014, 10:33
 
Fecha de Ingreso: octubre-2014
Mensajes: 1
Antigüedad: 9 años, 6 meses
Puntos: 0
Dias habiles sin sab y dom ni dias festivos

Cita:
Iniciado por flaviovich Ver Mensaje
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
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

Última edición por gnzsoloyo; 28/10/2014 a las 10:52
  #2 (permalink)  
Antiguo 28/10/2014, 10:47
Avatar de Libras
Colaborador
 
Fecha de Ingreso: agosto-2006
Ubicación: En la hermosa perla de occidente
Mensajes: 7.412
Antigüedad: 17 años, 8 meses
Puntos: 774
Respuesta: dias habiles sin sab y dom ni dias festivos

en esta parte

Código SQL:
Ver original
  1. IF datepart(dw,@EvalDate) = 6 OR datepart(dw,@EvalDate) = 7
  2.     BEGIN
  3.  
  4.         SET @DiasNoLaborables = @DiasNoLaborables + 1
  5.     END

Puedes poner una condicion que diga

Código SQL:
Ver original
  1. IF datepart(dw,@Eval DATE) = 6 OR datepart(dw,@EvalDate) = 7
  2.     BEGIN
  3.        IF (SELECT COUNT(*) FROM dias_feriados WHERE dia=@evaldate)=0
  4.          SET @DiasNoLaborables = @DiasNoLaborables + 1
  5.     END
que le estas diciendo que si el dia sabado es feriado que no lo tome en el conteo de dias no laborales porque ya lo estas contando :)
__________________
What does an execution plan say to t-sql query? Go f**k yourself, if you are not happy with me
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:35.