Ver Mensaje Individual
  #6 (permalink)  
Antiguo 17/02/2011, 10:36
leonardo_josue
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 10 meses
Puntos: 447
Respuesta: Adicionar un mes exacto a una fecha

Hola SONOFGOD:

No sé si ya resolviste tu problema, pero al leer que estás tratando de tomar excepciones y cuestiones por el estilo creo que te estás complicando la vida. Si aun no das con la función para agregar el mes prueba con esta, creo que funciona, recibe como parámetro una fecha y regresa la fecha con el mes agregado, con los casos especiales que mencionas.

Código:
CREATE OR REPLACE
FUNCTION F_AGREGA_MES (FECHA DATE)
RETURN DATE AS
BEGIN
  IF (EXTRACT(MONTH FROM FECHA) = 2) THEN
      --Para validar el mes de febrero
      IF (EXTRACT(DAY FROM FECHA) < 28) THEN
        RETURN ADD_MONTHS(FECHA, 1);
      ELSE 
        IF (EXTRACT(DAY FROM FECHA) = 28) THEN
          IF (EXTRACT(DAY FROM LAST_DAY(FECHA)) = 28) THEN
            RETURN FECHA + 28;
          ELSE
            RETURN FECHA + 29;
          END IF;
        ELSE
          RETURN FECHA + 29;   
        END IF;
      END IF;
  ELSE
    IF (EXTRACT(MONTH FROM FECHA) IN (4, 6, 9, 11)) THEN
      --para validar los días que tienen 30 dias
      IF (EXTRACT(DAY FROM FECHA) = 30) THEN 
        RETURN FECHA + 30;
      ELSE
        RETURN ADD_MONTHS(FECHA, 1);
      END IF;        
    ELSE
      --Se agrega un mes sin problemas
      RETURN ADD_MONTHS(FECHA, 1);
    END IF;
  END IF;    
  RETURN NULL;
END F_AGREGA_MES;
Si tú tienes otra solución a tu problema sería bueno que compartieras con el foro qué fue lo que hiciste, por si le puede servir a alguien más.

Saludos
Leo.