본문으로 건너뛰기
최종 수정: 에

MONTHS_BETWEEN

설명​

MONTHS_DIFF 함수와 달리 MONTHS_BETWEEN 함수는 일 구성 요소를 무시하지 않고, 날짜에 표시된 월 단위의 단순한 차이가 아닌 실제 월 차이를 나타내는 부동 소수점 수를 반환합니다.

MONTHS_BETWEEN 함수는 두 날짜 및 시간 값 사이의 월 차이를 계산하고 부동 소수점 결과를 반환합니다. 이 함수는 DATE, DATETIME, TIMESTAMP_NS 타입을 지원하며, 선택적 매개변수로 결과의 반올림 여부를 제어할 수 있습니다.

이 함수는 Oracle의 MONTHS_BETWEEN 함수와 동일하게 동작합니다.

구문​

MONTHS_BETWEEN(`<date_or_time_expr1>`, `<date_or_time_expr2>` [, `<round_type>`])

매개변수​

매개변수설명
<date_or_time_expr1>종료 날짜입니다. DATE/DATETIME/TIMESTAMP_NS 타입을 지원합니다. 구체적인 날짜 및 시간 형식과 날짜 형식은 날짜 및 시간 변환과 날짜 변환을 참조하세요.
<date_or_time_expr2>시작 날짜입니다. DATE/DATETIME/TIMESTAMP_NS 타입과 날짜 및 시간 형식에 맞는 문자열을 지원합니다.
<round_type>결과를 소수점 이하 8자리까지 반올림할지 여부입니다. true 또는 false를 지원합니다. 기본값은 true입니다.

반환값​

<date_or_time_expr2>를 <date_or_time_expr1>에서 뺀 결과를 월 단위로 반환하며, 반환 타입은 DOUBLE입니다.

결과 = (<date_or_time_expr1>.year - <date_or_time_expr2>.year) * 12 + <date_or_time_expr1>.month - <date_or_time_expr2>.month + (<date_or_time_expr1>.day - <date_or_time_expr2>.day) / 31.0

  • <date_or_time_expr1> 또는 <date_or_time_expr2>가 NULL이거나 둘 다 NULL이면 NULL을 반환합니다
  • <round_type>이 true이면 결과를 소수점 이하 8자리까지 반올림하고, 그렇지 않으면 DOUBLE 정밀도(소수점 이하 15자리)를 유지합니다
  • <date_or_time_expr1>이 <date_or_time_expr2>보다 이르면 음수를 반환합니다
  • 시간 구성 요소(시, 분, 초)는 계산에 영향을 주지 않으며, 날짜 구성 요소(연, 월, 일)만 사용됩니다

<date_or_time_expr1>과 <date_or_time_expr2>가 다음 조건을 충족하면 함수는 정수로 된 월 차이를 반환합니다(일 차이로 발생하는 소수 부분은 무시합니다).

  • 두 날짜가 각각 해당 월의 마지막 날인 경우(예: 2024-01-31 및 2024-02-29)
  • 두 날짜의 일 구성 요소가 같은 경우(예: 2024-01-15 및 2024-03-15)

예제​

--- Month difference between two dates
SELECT MONTHS_BETWEEN('2020-12-26', '2020-10-25') AS result;
+------------+
| result |
+------------+
| 2.03225806 |
+------------+

--- Including time components (does not affect result)
SELECT MONTHS_BETWEEN('2020-12-26 15:30:00', '2020-10-25 08:15:00') AS result;
+------------+
| result |
+------------+
| 2.03225806 |
+------------+

--- Disable rounding (preserve original precision)
SELECT MONTHS_BETWEEN('2020-10-25', '2020-12-26', false) AS result;
+---------------------+
| result |
+---------------------+
| -2.032258064516129 |
+---------------------+

--- Both are month-end dates (special handling, returns integer)
SELECT MONTHS_BETWEEN('2024-02-29', '2024-01-31') AS result;
+--------+
| result |
+--------+
| 1 |
+--------+

--- Same day component (special handling, returns integer)
SELECT MONTHS_BETWEEN('2024-03-15', '2024-01-15') AS result;
+--------+
| result |
+--------+
| 2 |
+--------+

--- Different day components and not month-end
SELECT MONTHS_BETWEEN('2024-02-29', '2024-01-30') AS result;
+------------+
| result |
+------------+
| 0.96774194 |
+------------+

--- Input is NULL (returns NULL)
SELECT MONTHS_BETWEEN(NULL, '2024-01-01') AS result;
+--------+
| result |
+--------+
| NULL |
+--------+