오라클에서 특정 월의 마지막 날짜를 구하는 방법을 아시나요? 특히 월별 보고서나 월말 통계를 계산할 때, 그 달의 마지막 날짜를 알아두면 많은 도움이 돼요. Oracle의 LAST_DAY 함수는 바로 이런 용도로 사용될 수 있죠. 여기서는 LAST_DAY 함수를 활용해 테이블 내 데이터에서 특정 월의 마지막 날짜를 쉽게 가져오는 방법을 안내해 드릴게요.
LAST_DAY 함수란?
Oracle에서 제공하는 LAST_DAY 함수는 입력된 날짜가 속한 월의 마지막 날짜를 반환해 주는 유용한 함수예요. 예를 들어, 2023-10-12와 같은 날짜가 입력되면, 2023년 10월의 마지막 날짜인 2023-10-31을 반환해 주죠. 이 함수는 DATE 형식의 데이터를 입력값으로 받아 사용됩니다.
LAST_DAY 함수의 기본 구문
아래는 LAST_DAY 함수를 사용할 때의 기본적인 구문이에요.
SELECT LAST_DAY(SYSDATE) FROM DUAL;
LAST_DAY
--------
21/01/31
날짜: 날짜형 데이터가 들어가는 부분이에요. 이 데이터는 DATE 형식이어야 하고, 보통 테이블의 날짜 컬럼에서 가져와요.
예제 쿼리
예를 들어, 직원 정보가 담긴 EMP 테이블에서 HIREDATE 컬럼에 저장된 각 직원의 입사 날짜를 기준으로 해당 월의 마지막 날짜를 조회하고 싶다면 다음과 같이 쿼리를 작성할 수 있어요.
SELECT DISTINCT
HIREDATE,
TO_CHAR(LAST_DAY(HIREDATE), 'YYYYMMDD') AS LAST_DAY_OF_MONTH
FROM EMP;
HIREDATE LAST_DAY_OF_MONTH
-------- ----------------
81/02/22 19810228
81/09/28 19810930
81/08/09 19810831
03/06/17 20030630
03/01/23 20030131
81/02/20 19810228
96/11/17 19961130
01/02/04 20010228
81/03/12 19810331
87/05/23 20870531
91/01/05 19910131
99/09/06 19990930
07/12/01 20071231
13 rows selected.
쿼리 설명
- HIREDATE: 입사 날짜가 저장된 컬럼이에요.
DATE형식으로 저장된 날짜 컬럼이라면 이 방식이 가장 간단해요. - LAST_DAY(HIREDATE):
HIREDATE의 월 마지막 날짜를 가져오는 함수예요. - TO_CHAR(..., 'YYYYMMDD'): 결과를 'YYYYMMDD' 형식의 문자열로 변환하여 출력해요.
- AS LAST_DAY_OF_MONTH: 조회 결과의 컬럼 이름을
LAST_DAY_OF_MONTH로 지정해 줘서 보기 쉽게 해줍니다.
예제 결과
만약 HIREDATE 컬럼에 2023-10-12와 같은 날짜가 있다면, 이 쿼리는 20231031이라는 결과를 반환해 줍니다.
| HIREDATE | LAST_DAY_OF_MONTH |
|---|---|
| 2023-10-12 | 20231031 |
| 2023-09-08 | 20230930 |
유용한 팁
LAST_DAY함수는 월별 데이터 처리나 주기적인 보고서 작성에 특히 유용해요. 예를 들어, 월말 통계가 필요할 때 이 함수를 활용하면 정확한 데이터 분석을 쉽게 할 수 있답니다.- 특정 월의 첫 번째 날짜가 필요한 경우에는 TRUNC 함수를 결합해 사용할 수 있어요. 예를 들어,
TRUNC(HIREDATE, 'MM')를 사용하면 해당 월의 첫 날짜를 구할 수 있어요.
Oracle SQL에서 LAST_DAY 함수를 활용하면 월별로 데이터 관리가 더 효율적이고 정확해져요.
SELECT HIREDATE, TRUNC (HIREDATE, 'MM') FROM EMP;
HIREDATE TRUNC (HIREDATE, 'MM')
-------- --------
91/01/05 91/01/01
99/09/06 99/09/01
01/02/04 01/02/01
03/06/17 03/06/01
81/03/12 81/03/01
07/12/01 07/12/01
81/02/20 81/02/01
81/02/22 81/02/01
81/09/28 81/09/01
81/08/09 81/08/01
87/05/23 87/05/01
81/03/12 81/03/01
03/01/23 03/01/01
96/11/17 96/11/01
14 rows selected.
