MySQL에서 현재 연도의 마지막 날을 구하려면 LAST_DAY() 함수를 활용할 수 있습니다. 이 함수는 특정 날짜가 속한 달의 마지막 날을 반환하기 때문에, 현재 날짜를 12월로 조정한 뒤 적용하면 해당 연도의 마지막 날을 손쉽게 얻을 수 있습니다.
기본 문법
올해의 마지막 날을 구하는 쿼리 문법은 다음과 같습니다.
SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 12-MONTH(CURDATE()) MONTH));
이 쿼리의 동작 원리를 살펴보면 다음과 같습니다.
- CURDATE(): 현재 날짜를 반환합니다.
- MONTH(CURDATE()): 현재 월을 숫자로 추출합니다.
- 12-MONTH(CURDATE()): 현재 월부터 12월까지 남은 개월 수를 계산합니다.
- DATE_ADD(): 현재 날짜에 남은 개월 수를 더해 12월로 이동시킵니다.
- LAST_DAY(): 해당 월(12월)의 마지막 날을 반환합니다.
실행 예제
실제로 위 문법을 실행하여 현재 연도의 마지막 날을 확인해 보겠습니다.
mysql> SELECT LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 12-MONTH(CURDATE()) MONTH));
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------------------------------------------------------------------+ | LAST_DAY(DATE_ADD(CURDATE(), INTERVAL 12-MONTH(CURDATE()) MONTH)) | +-------------------------------------------------------------------+ | 2019-12-31 | +-------------------------------------------------------------------+ 1 row in set (0.00 sec)
참고: 대체 방법
MySQL 8.0 이상에서는 MAKEDATE() 함수를 사용하는 더 간결한 방법도 있습니다.
SELECT LAST_DAY(MAKEDATE(YEAR(CURDATE()), 365));
또는 문자열 포맷팅을 활용한 방법도 가능합니다.
SELECT STR_TO_DATE(CONCAT(YEAR(CURDATE()), '-12-31'), '%Y-%m-%d');
어떤 방법을 사용하든 동일하게 YYYY-12-31 형식으로 올해의 마지막 날인 12월 31일을 정확히 구할 수 있습니다.