DataBase/Oracle

[ORACLE]날짜 사이의 개월 수를 구하는 MONTHS_BETWEEN 함수

DevStory 2021. 5. 18.

MONTHS_BETWEEN Function

MONTHS_BETWEEN (date1, date2)

날짜 사이의 개월 수를 구합니다.

 

사용 가능한 버전

Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i


매개변수

date1

- 첫 번째 날짜입니다.

 

date2

- 두 번째 날짜입니다.


특징

  1. date1이 date2 이후인 경우 결과는 양수입니다.
  2. date1이 date2보다 이전이면 결과는 음수입니다.
  3. date1과 date2가 일자가 같거나 월의 마지막 날인 경우 결과는 항상 정수입니다.
  4. 그렇지 않을 경우 MONTHS_BETWEEN 함수는 월 31 일을 기준으로 계산합니다.
  5. 동일한 날짜일 경우 결과는 0입니다.

Example Data

EX 1) 일자가 같은 날짜 사이의 개월 수

- 2021/05/31은 2021/03/31의 이후이므로 결과는 양수입니다.

- 2021/03/31은 2021/05/31의 이전이므로 결과는 음수입니다.

- 일자가 31일로 동일하므로 결과는 정수입니다.

SELECT MONTHS_BETWEEN(TO_DATE('31-MAY-21'), TO_DATE('31-MAR-21')) AS PLUS_MONTH
     , MONTHS_BETWEEN(TO_DATE('31-MAR-21'), TO_DATE('31-MAY-21')) AS MINUS_MONTH
FROM DUAL;


EX 2) 월의 마지막 날짜인 경우

- 2021년 4월의 마지막 일은 30일이며, 2021년 5월의 마지막 일은 31일 이므로 사이의 값은 정수입니다.

SELECT MONTHS_BETWEEN(TO_DATE('31-MAY-21'), TO_DATE('30-APR-21')) AS PLUS_MONTH
     , MONTHS_BETWEEN(TO_DATE('30-APR-21'), TO_DATE('31-MAY-21')) AS MINUS_MONTH
FROM DUAL;


EX 3) 일자가 다를 경우

SELECT MONTHS_BETWEEN(TO_DATE('1-MAY-21'), TO_DATE('30-APR-21')) AS PLUS_MONTH
     , MONTHS_BETWEEN(TO_DATE('30-APR-21'), TO_DATE('1-MAY-21')) AS MINUS_MONTH
FROM DUAL;

조건에 따른 계산식

1. date1의 일자 > date2의 일자

계산식 : ( date1의 일자 - date2의 일자 ) / 31

 

2. date1의 일자 < date2의 일자

계산식 : ( 31 - date2의 일자 + date1의 일자 ) / 31

 

2021/05/01의 일자는 1일, 2021/04/30의 일자는 30일입니다.

date1의 일자 < date2의 일자이므로 (31 - 30 + 1) / 31 = 0.64516... 입니다. 

반응형

댓글