MySQL에서 이전 달의 마지막 날 구하기
MySQL에서는 LAST_DAY() 함수와 INTERVAL 연산을 조합하면 아주 간단하게 이전 달의 마지막 날짜를 구할 수 있습니다.
기본 쿼리
다음과 같이 NOW()에서 1개월을 빼고, 그 결과에 LAST_DAY() 함수를 적용하면 됩니다.
mysql> SELECT LAST_DAY(NOW() - INTERVAL 1 MONTH) AS '지난 달의 마지막 날';
+---------------------------+
| 지난 달의 마지막 날 |
+---------------------------+
| 2017-09-30 |
+---------------------------+
1 row in set (0.00 sec)
쿼리 동작 원리
1. NOW() - INTERVAL 1 MONTH
현재 시각에서 정확히 1개월을 뺀 날짜를 계산합니다. 예를 들어 현재가 2017년 10월이라면 2017년 9월의 같은 일자가 반환됩니다.
2. LAST_DAY()
인자로 전달된 날짜가 속한 달의 마지막 날을 반환합니다. 월말이 28일, 29일, 30일, 31일 중 무엇이든 자동으로 계산해 주므로 윤년 처리도 별도로 신경 쓸 필요가 없습니다.
참고: 다른 방법들
상황에 따라 아래와 같은 변형 쿼리도 유용하게 사용할 수 있습니다.
- 이번 달의 마지막 날:
SELECT LAST_DAY(NOW()); - 다음 달의 마지막 날:
SELECT LAST_DAY(NOW() + INTERVAL 1 MONTH); - 특정 날짜 기준 이전 달의 마지막 날:
SELECT LAST_DAY('2017-10-15' - INTERVAL 1 MONTH);
이처럼 LAST_DAY() 함수 하나만 기억해 두면 월말 날짜 계산과 관련된 대부분의 요구 사항을 손쉽게 처리할 수 있습니다.