Contents
see List작성일 2015. 01. 05.
Oracle 월 간격(개월 수) 구하기
Oracle에서 두 날짜 사이의 개월 수를 계산하는 MONTHS_BETWEEN 함수와 다양한 날짜 연산 방법입니다.
1. MONTHS_BETWEEN 기본 사용
-- 두 날짜 사이 개월 수
SELECT MONTHS_BETWEEN(종료일, 시작일) FROM DUAL;
-- 예시
SELECT MONTHS_BETWEEN(
TO_DATE("2024-06-15", "YYYY-MM-DD"),
TO_DATE("2024-01-15", "YYYY-MM-DD")
) FROM DUAL;
-- 결과: 5
-- 같은 일자가 아니면 소수점 발생
SELECT MONTHS_BETWEEN(
TO_DATE("2024-06-20", "YYYY-MM-DD"),
TO_DATE("2024-01-15", "YYYY-MM-DD")
) FROM DUAL;
-- 결과: 5.16129...
2. 정수로 개월 수 구하기
-- 올림
SELECT CEIL(MONTHS_BETWEEN(종료일, 시작일)) FROM DUAL;
-- 내림
SELECT FLOOR(MONTHS_BETWEEN(종료일, 시작일)) FROM DUAL;
-- 반올림
SELECT ROUND(MONTHS_BETWEEN(종료일, 시작일)) FROM DUAL;
-- 절삭
SELECT TRUNC(MONTHS_BETWEEN(종료일, 시작일)) FROM DUAL;
3. 실전 예시
-- 회원 가입 후 경과 개월 수
SELECT
user_name,
reg_date,
TRUNC(MONTHS_BETWEEN(SYSDATE, reg_date)) AS 가입개월수
FROM tb_user;
-- 계약 잔여 개월 수
SELECT
contract_id,
CEIL(MONTHS_BETWEEN(end_date, SYSDATE)) AS 잔여개월
FROM tb_contract
WHERE end_date > SYSDATE;
-- 개월 수에 따른 등급 분류
SELECT
user_name,
CASE
WHEN MONTHS_BETWEEN(SYSDATE, reg_date) >= 24 THEN "VIP"
WHEN MONTHS_BETWEEN(SYSDATE, reg_date) >= 12 THEN "골드"
WHEN MONTHS_BETWEEN(SYSDATE, reg_date) >= 6 THEN "실버"
ELSE "일반"
END AS 등급
FROM tb_user;
4. 날짜 더하기/빼기
-- N개월 더하기
SELECT ADD_MONTHS(SYSDATE, 3) FROM DUAL; -- 3개월 후
-- N개월 빼기
SELECT ADD_MONTHS(SYSDATE, -6) FROM DUAL; -- 6개월 전
-- 월 마지막 날
SELECT LAST_DAY(SYSDATE) FROM DUAL;
-- 다음 특정 요일
SELECT NEXT_DAY(SYSDATE, "월요일") FROM DUAL;
5. 년/월/일 단위 계산
-- 년수 계산
SELECT TRUNC(MONTHS_BETWEEN(종료일, 시작일) / 12) AS 년수 FROM DUAL;
-- 년, 월 분리
SELECT
TRUNC(MONTHS_BETWEEN(종료일, 시작일) / 12) AS 년,
MOD(TRUNC(MONTHS_BETWEEN(종료일, 시작일)), 12) AS 월
FROM DUAL;
-- 일수 계산
SELECT 종료일 - 시작일 AS 일수 FROM DUAL;
6. 기간 표시 포맷
-- "N년 M개월" 형식
SELECT
TRUNC(MONTHS_BETWEEN(SYSDATE, reg_date) / 12) || "년 " ||
MOD(TRUNC(MONTHS_BETWEEN(SYSDATE, reg_date)), 12) || "개월" AS 가입기간
FROM tb_user;
MONTHS_BETWEEN 주의사항
| 상황 | 결과 |
|---|---|
| 같은 일자 | 정수 |
| 다른 일자 | 소수 (일수/31 추가) |
| 둘 다 월말 | 정수 |
| 시작일 > 종료일 | 음수 |
7. 비즈니스 개월 수 (월 단위 계산)
-- 시작월과 종료월만 고려 (일 무시)
SELECT
(EXTRACT(YEAR FROM 종료일) - EXTRACT(YEAR FROM 시작일)) * 12 +
(EXTRACT(MONTH FROM 종료일) - EXTRACT(MONTH FROM 시작일)) AS 월차이
FROM DUAL;database
| No | 작성일 | Title |
|---|---|---|
| 2914 | 2026. 05. 30. | PostgreSQL Autovacuum 운영 점검: 테이블 팽창과 느린 쿼리를 막는 VACUUM·ANALYZE 실전 가이드 |
| 2859 | 2026. 05. 22. | PostgreSQL 운영 백업과 PITR 복구 점검: pg_dump, pg_basebackup, WAL 보관 실전 가이드 |
| 2777 | 2026. 05. 14. | MySQL 8.4 LTS 운영 쿼리 튜닝: 실행 계획, 히스토그램, 복합 인덱스 실전 점검법 |
| 2619 | 2026. 04. 26. | PostgreSQL 18 완전 정복: Async I/O, UUIDv7, Temporal 제약 조건 실전 가이드 |
| 2536 | 2026. 04. 18. | pgvector + PostgreSQL 벡터 검색 완전 정복 — 설치부터 RAG 시스템 구축까지 |
| 2493 | 2026. 04. 14. | PostgreSQL 17 핵심 기능 완벽 가이드: JSON_TABLE, 쿼리 최적화, 벡터 검색 통합 |
| 2472 | 2026. 04. 13. | PostgreSQL 18 신기능 완벽 가이드: 비동기 I/O, UUIDv7, Index Skip Scan |
| 2452 | 2026. 04. 12. | PostgreSQL 17 + pgvector로 구축하는 AI 시맨틱 검색 시스템 |
| 2428 | 2026. 04. 11. | PostgreSQL 17 SQL/JSON 함수 완벽 가이드 |
| 2392 | 2026. 04. 09. | PostgreSQL 17 쿼리 최적화 실전 가이드 - B-Tree 개선, JSON_TABLE, VACUUM 튜닝 |