[Oracle] 해당 월의 마지막 날짜 구하기 (LAST_DAY)
- 데이터베이스/오라클
- 2022. 1. 17.
오라클에서 해당 월(MONTH)의 마지막 일자를 구하기 위해서는 LAST_DAY 함수를 사용하면 된다. 월별로 마지막 일자(28일, 29일, 30일, 31일)가 틀리기 때문에 조회를 할 때마다 직접 계산을 하는 건 많이 번거롭다. LAST_DAY 함수를 사용하면 이번 달의 마지막 일자, 특정 일자에 해당하는 월의 마지막 일자를 쉽게 구할 수 있다.
기본 사용법
SELECT LAST_DAY(TO_DATE('2022-01-17', 'YYYY-MM-DD'))
FROM dual
특정일자에 해당하는 월의 마지막 일자를 구하는 예제이다. 1월의 마지막 일자 31일 반환된다.
활용 예제
이번 달 시작 일자 종료 일자 구하기
SELECT TRUNC(SYSDATE, 'MM') AS first_day_of_month
, LAST_DAY(TRUNC(SYSDATE)) AS last_day_of_month
FROM dual
TRUNC 함수를 사용하면 해당 일자 월의 시작일을 쉽게 구할 수 있다. TRUNC('날짜', 'MM')
LAST_DAY 함수를 사용하여 SYSDATE 기준에 해당하는 월의 마지막 일자를 구하는 예제이다.
올해 월별(1월~12일) 시작 일자 종료 일자 구하기
SELECT a.first_day_of_month
, LAST_DAY(a.first_day_of_month) AS last_day_of_month
FROM (
SELECT ADD_MONTHS(TO_DATE('2022-01-01', 'YYYY-MM-DD'), LEVEL - 1 ) AS first_day_of_month
FROM dual
CONNECT BY LEVEL <= 12
) a
지정한 해의 1월부터 12월까지 시작일자와 마지막 일자를 구하는 예제이다.
월별 입사자 조회
SELECT empno
, ename
, job
, hiredate
FROM emp
WHERE hiredate BETWEEN TO_DATE('1981-09-01', 'YYYY-MM-DD')
AND LAST_DAY(TO_DATE('1981-09-01', 'YYYY-MM-DD'))
ORDER BY hiredate
WHERE 절에서 월별 데이터를 조회할 때 자주 사용한다.
가끔 쿼리문을 분석하다 보면 WHERE TO_CHAR(hiredate, 'YYYYMM') = TO_CHAR(SYSDATE, 'YYYYMM')처럼 좌측의 칼럼에 함수를 사용하여 월별 데이터를 조회한 쿼리를 발견할 때가 있다. 기준 칼럼에 함수를 사용하면 인덱스를 타지 않아서 속도가 느려질 수 있으니, 위의 예제처럼 BETWEEN을 사용하여 조회하는 것이 바람직하다.