Ver Mensaje Individual
  #2 (permalink)  
Antiguo 14/08/2012, 05:06
GeriReshef
 
Fecha de Ingreso: julio-2012
Ubicación: Israel
Mensajes: 360
Antigüedad: 11 años, 9 meses
Puntos: 40
Información Respuesta: Dias habiles Auxilio!!!!

Si se trata de 30 dias es muy facil porque son exactamente 6 semanas (cada semana = 5 dias de trabajo).
El problema es con 32 dias por ejemplo que son 32/5=6 semanas completas y 32%5=2 dia mas que en Viernes (10/08/2012 es Viernes) deben pasarnos al proximo Martes..

La soulución es (en caso de 32 dias) restar de 10/08/2012 4 dias para llegar al previo Lunes,
y añadir 32+4=36 dias que son 36/5=7 semanas y 36%5=1 dias mas..

Mientras tanto hay que tomar en cuenta que en paises latinos @@DateFirst=1 que significa que Lunes es el primer dia de la semana (Lunes=1, Domingo=7),
y en paises "ingleses" @@DateFirst=7 y Domingo es el primer dia de la semana (Domingo=1, Lunes=2).

Finalmente la solución (esto es lo mas importante y no todo el bla-bla..):
Código SQL:
Ver original
  1. DECLARE @D DATE='20120810',
  2.         @N INT=30;
  3. SELECT  DateAdd(DAY,-DatePart(WeekDay,@D)+(9-@@DateFirst)%7+(@N+DatePart(WeekDay,@D)-(9-@@DateFirst)%7)/5*7+(@N+DatePart(WeekDay,@D)-(9-@@DateFirst)%7)%5,@D);
__________________
El Castellano no es mi lengua materna: discúlpenme por los errores gramaticales.
Mi blog