Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 지난달 첫째 날 구하는 방법 (쿼리 예제)

MySQL에서 지난달 첫째 날 구하기

MySQL에서는 DATE_FORMAT() 함수와 CURDATE() 함수, 그리고 INTERVAL 표현식을 조합하면 지난달 첫째 날을 아주 간단하게 구할 수 있습니다.

기본 쿼리

mysql> SELECT DATE_FORMAT(CURDATE() - INTERVAL 1 MONTH, '%Y-%m-01') AS 'FIRST DAY OF PREVIOUS MONTH';
+-----------------------------+
| FIRST DAY OF PREVIOUS MONTH |
+-----------------------------+
| 2017-09-01                |
+-----------------------------+
1 row in set (0.00 sec)

쿼리 동작 원리

이 쿼리가 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. CURDATE() — 현재 날짜를 반환합니다. 예를 들어 오늘이 2017년 10월 15일이라면 2017-10-15를 반환합니다.

2. - INTERVAL 1 MONTH — 현재 날짜에서 정확히 한 달을 뺀 날짜를 계산합니다. 위 예시에서는 2017-09-15가 됩니다.

3. DATE_FORMAT(..., '%Y-%m-01') — 앞서 계산된 날짜를 지정한 형식으로 변환합니다. 여기서 핵심은 형식 문자열의 마지막 부분입니다. %Y는 연도, %m은 월을 나타내고, 일(day) 부분에는 실제 값을 사용하지 않고 고정된 값 01을 넣습니다. 그 결과 해당 월의 첫째 날인 2017-09-01이 반환됩니다.

다른 방법: LAST_DAY() 함수 활용

LAST_DAY() 함수를 사용해도 같은 결과를 얻을 수 있습니다. 두 달 전 날짜의 마지막 날에 하루를 더하면 지난달의 첫째 날이 됩니다.

mysql> SELECT LAST_DAY(CURDATE() - INTERVAL 2 MONTH) + INTERVAL 1 DAY AS 'FIRST DAY OF PREVIOUS MONTH';
+-----------------------------+
| FIRST DAY OF PREVIOUS MONTH |
+-----------------------------+
| 2017-09-01                |
+-----------------------------+
1 row in set (0.00 sec)

정리

두 방법 모두 지난달 첫째 날을 정확하게 반환하며, 월말이나 윤년 등의 경계 상황에서도 안전하게 동작합니다. 일반적으로는 DATE_FORMAT()을 사용하는 첫 번째 방법이 직관적이고 널리 쓰이며, 보고서 작성이나 월별 데이터 집계 시 유용하게 활용할 수 있습니다.