반응형

oracle add_months FUNCTION  함수 사용 시 주의 사항 


  • 오늘 2016.2.29 이고 앞으로 1달 후 날짜를 구해 올때 



2016.3.31 이 맞을까요?

2016.3.29 이 맞을까요?


oracle add_months FUNCTION 사용시 2016.3.31 결과가 나옵니다.


  • 오늘 2016.3.31 이고 앞으로 1달 후 날짜를 구해 올때 



2016.4.31 이 맞을까요?

2016.4.30 이 맞을까요?


이 경우는 명확히 2016.4.31 입니다.. - 4월달은 30일까지 있기때문이죠

(oracle add_months FUNCTION 사용시 2016.4.31 결과가 나옵니다.)



결론 : oracle add_months FUNCTION 사용시 요구사항이 무엇인지 에 따라 

       add_months FUNCTION 대처 할수있는 아래 함수를 사용해야 함다.


아래 함수 사용시 2016.2.29   앞으로 1달 후 날짜 2016.3.28 결과가 나옵니다.




-------------------------------------------------------------------------------------------------

CREATE OR REPLACE FUNCTION TMALL.FN_SP_NON_ANSI_ADD_MONTHS

(  vDate DATE,

   vMonths INTEGER  ) 

RETURN DATE AS  newDate DATE;

/******************************************************************************

   NAME:       FN_SP_NON_ANSI_ADD_MONTHS

   PURPOSE:    ADD_MONTHS  마지막 날짜 버그 대응 함수


   REVISIONS:

   Ver        Date        Author           Description

   ---------  ----------  ---------------  ------------------------------------

   1.0        2016-05-18           kkk   Created this function.


   NOTES:

    vDate : 기준날짜

    vMonths :  기준날짜로 조회 할 월 -1 +1..


    newDate :  결과 값

   

    EX) SELECT FN_SP_NON_ANSI_ADD_MONTHS(to_date('2016-02-28','YYYY-MM-DD'), 1) FROM dual;

        newDate : 2016/03/28 00:00:00

******************************************************************************/

BEGIN


  newDate := add_months(vDate, vMonths);

  IF to_char(vDate, 'DD') < to_char(newDate, 'DD') THEN

    newDate := vDate + numtoyminterval(vMonths, 'month');

  END IF;

  RETURN newDate;

END FN_SP_NON_ANSI_ADD_MONTHS;


반응형

+ Recent posts