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

MySQL에서 날짜 데이터의 해당 월 첫날과 마지막 날 구하는 방법

MySQL에서 저장된 날짜(date) 값을 기준으로 그 달의 첫 번째 날마지막 날을 조회해야 하는 경우가 자주 있습니다. 예를 들어 월별 마감일 계산이나 리포트 작성 시 유용하게 활용할 수 있는데요. 이 글에서는 DATE_FORMAT() 함수와 LAST_DAY() 함수를 사용하여 손쉽게 구하는 방법을 단계별로 알아보겠습니다.

1. 테스트용 테이블 생성하기

먼저 날짜를 저장할 테이블을 생성합니다.

mysql> create table DemoTable
-> (
-> DueDate date
-> );
Query OK, 0 rows affected (0.73 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 날짜 레코드를 추가합니다.

mysql> insert into DemoTable values('2019-01-11');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('2019-04-19');
Query OK, 1 row affected (0.14 sec)

3. 저장된 데이터 확인하기

SELECT 문으로 테이블의 전체 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+------------+
| DueDate |
+------------+
| 2019-01-11 |
| 2019-04-19 |
+------------+
2 rows in set (0.00 sec)

4. 월의 첫날과 마지막 날 조회하기

핵심 쿼리는 다음과 같습니다.

mysql> select date_format(DueDate,'%Y-%m-01') as FirstDayOfMonth,
last_day(DueDate) as LastDayOfMonth from DemoTable;

실행 결과는 다음과 같습니다.

+-----------------+----------------+
| FirstDayOfMonth | LastDayOfMonth |
+-----------------+----------------+
| 2019-01-01 | 2019-01-31 |
| 2019-04-01 | 2019-04-30 |
+-----------------+----------------+
2 rows in set (0.00 sec)

쿼리 동작 원리

첫 번째 날 구하기: DATE_FORMAT(DueDate, '%Y-%m-01')은 날짜의 연도와 월은 그대로 유지하면서 일(day) 부분을 항상 01로 고정하여 출력합니다. 따라서 어떤 날짜가 입력되더라도 해당 월의 1일이 반환됩니다.

마지막 날 구하기: LAST_DAY() 함수는 인자로 전달된 날짜가 속한 달의 마지막 날짜를 자동으로 계산해 줍니다. 1월처럼 31일까지 있는 달, 4월처럼 30일까지 있는 달, 심지어 윤년의 2월(29일)까지 정확하게 처리해 주기 때문에 별도의 조건 분기가 필요 없습니다.

이처럼 두 함수만 활용하면 복잡한 계산 없이도 해당 월의 시작일과 종료일을 간단하고 안정적으로 구할 수 있습니다.