Hola! les comento mi problema al condicionar fechas en sql server en algunos store procedure que estoy creando.
Mi proceso es el siguiente:
Dentro mis store procedure manejo un grupo de fechas, en las cuales un parametro obtiene el primer dia del mes actual y otro obtiene el ultimo dia del mes actual. Cuando es cambio de mes (un ejemplo de Junio a Julio) en alguna parte del store procedure toma el parametro del primer dia del mes al que se esta cambiando (1ero. de Julio) pero debe tomar el ultimo dia del mes anterior (30 de Junio), esto es asi porque si toma el ultimo dia del mes al que se esta cambiando (31 de Julio) no obtendria ninguna informacion.
Como condiciono esta fecha del ultimo dia del mes cuando es un cambio de mes, y que sea almacenado en el mismo parametro??
Les dejo mi codigo, esperando me puedan ayudar.
Código SQL:
Ver original-- cuando es cambio de mes tomar el ultimo dia del mes anterior
DECLARE
@d VARCHAR(2),
@m VARCHAR(2),
@a VARCHAR(4) ,
@varfechult VARCHAR(50),
@varfechinic VARCHAR(50),
@FN VARCHAR(50),
@FcF VARCHAR(50),
@varFechaHoy VARCHAR(50),
@varCambioMes VARCHAR (50)
IF @varCambioMes = @varfechinic
--//recupera el mes actual
SET @m=MONTH(getdate()) -1
--//recupera el año actual
SET @a=YEAR(getdate())
--//devuelve el primer dia del mes
SET @varfechinic=@a+'0'+@m+'01'
--//Ultimo dia del mes
SET @FN=dateadd( MONTH,1,@varfechinic) -1
--//devuelve el ultimo dia del mes
SET @varfechult=CAST(YEAR(@FN)AS VARCHAR)+'0'+ CAST(MONTH(@FN)AS VARCHAR)+CAST(DAY(@FN)AS VARCHAR)
ELSE
--//recupera el mes actual
SET @m=MONTH(getdate())
--//recupera el año actual
SET @a=YEAR(getdate())
--//devuelve el primer dia del mes
SET @varfechinic=@a+'0'+@m+'01'
--//Ultimo dia del mes
SET @FN=dateadd( MONTH,1,@varfechinic) -1
--//devuelve el ultimo dia del mes
SET @varfechult=CAST(YEAR(@FN)AS VARCHAR)+'0'+ CAST(MONTH(@FN)AS VARCHAR)+CAST(DAY(@FN)AS VARCHAR)
Aqui la logica que tome, es condicionar con IF ELSE el parametro de @varCambioMes sea igual a @varfechinic, cada que sea el primer dia del mes, indica que es cambio de mes y le resta -1 a month, de lo contrario si no es inicio de mes, no le resta nada a month.
Cuando lo ejecuto, me sale este error:
Server: Msg 156, Level 15, State 1, Line 27
Incorrect syntax near the keyword 'else'.
Espero haberme dado a entender para que me puedan ayudar.
Gracias!