ADD_MONTHS의 값과 MONTHS_BETWEEN 값이 다를 경우.. 0 4 1,081

by 동글동글 [Oracle 기초] [2018.01.02 13:11:17]


1달, 2달 개월수로 신청을 받기 위해 ADD_MONTHS로 날짜를 계산하고

신청들어온 날짜가 개월수로 제대로 들어왔는지 이중체크를 해야합니다.

 

다른 경우에는 별다른 문제점이 없었는데,

 

2018-01-29    +1개월  2018-02-28     MONTHS_BETWEEN   0.967741935483870967741935483870967741936

2018-01-30    +1개월  2018-02-28     MONTHS_BETWEEN   0.935483870967741935483870967741935483871

2018-01-31    +1개월  2018-02-28     MONTHS_BETWEEN   1

 

ADD_MONTHS로 2월 28일 말일날짜 계산되는건 이해가 되긴 하는데..

해당 날짜를 months_between으로 돌리면 1로 안떨어지네요 ㅜㅜ

add_months를 2달로 하면 또 괜찮고..

혹시 이런 고민해보신분들 계실까요...

저 두 날짜만 예외처리를 해야할지....

 

 

SELECT ADD_MONTHS(TO_DATE('20180129','YYYYMMDD'),1) FROM dual;

SELECT TO_NUMBER(MONTHS_BETWEEN(TO_DATE('2018-02-28','YYYY-MM-DD'),TO_DATE('2018-01-29','YYYY-MM-DD'))) AS CHK
       FROM DUAL;
 

 

 

 

by 무지버기 [2018.01.02 13:31:07]

전에 저도 문의했던 내용에 대한 답변 내용입니다.

http://www.gurubee.net/article/78676


by 동글동글 [2018.01.05 16:40:17]

많은 도움 되었습니다. 감사합니다.


by 마농 [2018.01.02 18:14:01]

원래 달마다 일수가 다르므로 기준을 어떻게 정하느냐에 따라 계산결과는 다를 수 있습니다.
반올림 한 수의 원래값을 알 수 없듯이
1개월 더한 일자의 원래 일자를 알 수 없는 것은 어쩌면 당연한 일입니다.


by 동글동글 [2018.01.05 16:40:26]

많은 도움 되었습니다. 감사합니다.

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입