Estoy trabajando en una función en SQL que aumente un mes a una fecha determinada (@FECHA
), considerando que, si la fecha resultante es día inhábil se sumen los días (sábado o domingo, o ambos según corresponda) y comience en día lunes(hábil).
Código SQL
DECLARE @FECHA AS DATETIME
SET @FECHA = '2016-11-14 08:09:48.507' --ejemplo con cálculo incorrecto
SET @FECHA = '2016-11-16 08:09:48.507' --ejemplo con cálculo correcto
CASE WHEN DATEPART(WEEKDAY, CASE WHEN DATEPART(DAY,@FECHA)<15
THEN CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,@FECHA),0)))
ELSE
CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,DATEADD(MM,1,@FECHA)),0))) END) >= 4
THEN DATEADD(DAY,(6 - DATEPART(WEEKDAY, CASE WHEN DATEPART(DAY,@FECHA)<15
THEN CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,@FECHA),0)))
ELSE
CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,DATEADD(MM,1,@FECHA)),0))) END)),
CASE WHEN DATEPART(DAY,@FECHA)<15
THEN CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,@FECHA),0)))
ELSE
CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,DATEADD(MM,1,@FECHA)),0))) END)
ELSE
DATEADD(DAY,-1*((DATEPART(WEEKDAY, CASE WHEN DATEPART(DAY,@FECHA)<15
THEN CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,@FECHA),0)))
ELSE
CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,DATEADD(MM,1,@FECHA)),0))) END))+2),
CASE WHEN DATEPART(DAY,@FECHA)<15
THEN CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,@FECHA),0)))
ELSE
CONVERT(DATE,DATEADD(DAY,14,DATEADD(MM,DATEDIFF(MM,0,DATEADD(MM,1,@FECHA)),0))) END) END AS FECHARESULTANTE
Hasta el momento mi resultado es correcto cuando en @FECHA
, el día de la fecha es mayor a 15, pero cuando este es menor a 15, se está haciendo incorrecto el cálculo.