Ver Mensaje Individual
  #1 (permalink)  
Antiguo 21/07/2011, 08:48
sadragoba
 
Fecha de Ingreso: abril-2011
Mensajes: 10
Antigüedad: 13 años, 7 meses
Puntos: 0
Pregunta Condicionar fechas en SQL con store procedure

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
  1. -- cuando es cambio de mes tomar el ultimo dia del mes anterior
  2. DECLARE
  3. @d VARCHAR(2),
  4. @m VARCHAR(2),
  5. @a VARCHAR(4) ,
  6. @varfechult VARCHAR(50),
  7. @varfechinic VARCHAR(50),
  8. @FN VARCHAR(50),
  9. @FcF VARCHAR(50),
  10. @varFechaHoy VARCHAR(50),
  11. @varCambioMes VARCHAR (50)
  12.  
  13.  
  14. IF @varCambioMes = @varfechinic
  15.  
  16.     --//recupera el mes actual  
  17.     SET @m=MONTH(getdate()) -1
  18.     --//recupera el año actual  
  19.     SET @a=YEAR(getdate())  
  20.     --//devuelve el primer dia del mes
  21.     SET @varfechinic=@a+'0'+@m+'01'
  22.     --//Ultimo dia del mes  
  23.     SET @FN=dateadd( MONTH,1,@varfechinic) -1
  24.     --//devuelve el ultimo dia del mes
  25.     SET @varfechult=CAST(YEAR(@FN)AS VARCHAR)+'0'+ CAST(MONTH(@FN)AS VARCHAR)+CAST(DAY(@FN)AS VARCHAR)
  26.  
  27. ELSE
  28.  
  29.     --//recupera el mes actual  
  30.     SET @m=MONTH(getdate())  
  31.     --//recupera el año actual  
  32.     SET @a=YEAR(getdate())  
  33.     --//devuelve el primer dia del mes
  34.     SET @varfechinic=@a+'0'+@m+'01'
  35.     --//Ultimo dia del mes  
  36.     SET @FN=dateadd( MONTH,1,@varfechinic) -1
  37.     --//devuelve el ultimo dia del mes
  38.     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!