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

MySQL에서 해당 월의 첫날 구하는 방법 (DATE_FORMAT 활용법)

MySQL에서는 DATE_FORMAT() 함수를 사용하여 각 날짜가 속한 달의 첫날을 손쉽게 구할 수 있습니다. 이 함수는 날짜 형식을 지정하는 포맷 문자열을 받아 원하는 형태로 변환해 주는데, '%Y-%m-01'과 같이 일(day) 부분을 '01'로 고정하면 해당 월의 첫날이 됩니다.

기본 문법

SELECT DATE_FORMAT(날짜컬럼명, '%Y-%m-01') AS 별칭 FROM 테이블명;

문법을 더 잘 이해하기 위해 실제 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성

먼저 datetime 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> CREATE TABLE getFirstDayOfMonth
    -> (
    -> DueDatetime DATETIME
    -> );
Query OK, 0 rows affected (1.16 sec)

2. 샘플 데이터 삽입

INSERT 명령어를 사용하여 현재 시점을 기준으로 다양한 월의 날짜 데이터를 입력합니다.

mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL 3 MONTH));
Query OK, 1 row affected (0.30 sec)

mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -3 MONTH));
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -2 MONTH));
Query OK, 1 row affected (0.18 sec)

mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -1 MONTH));
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO getFirstDayOfMonth VALUES(DATE_ADD(NOW(), INTERVAL -4 MONTH));
Query OK, 1 row affected (0.10 sec)

3. 저장된 데이터 확인

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

mysql> SELECT * FROM getFirstDayOfMonth;

출력 결과

+---------------------+
| DueDatetime         |
+---------------------+
| 2019-03-20 12:32:06 |
| 2018-09-20 12:32:16 |
| 2018-10-20 12:32:22 |
| 2018-11-20 12:32:28 |
| 2018-08-20 12:32:33 |
+---------------------+
5 rows in set (0.00 sec)

4. 해당 월의 첫날 조회하기

이제 DATE_FORMAT() 함수를 적용하여 각 날짜가 속한 월의 첫날을 반환하는 쿼리를 실행합니다. 컬럼에 어떤 날짜가 저장되어 있든, 아래 쿼리는 각각 해당 월의 1일을 결과로 돌려줍니다.

mysql> SELECT DATE_FORMAT(DueDatetime, '%Y-%m-01') AS DateDemo FROM getFirstDayOfMonth;

출력 결과

+------------+
| DateDemo   |
+------------+
| 2019-03-01 |
| 2018-09-01 |
| 2018-10-01 |
| 2018-11-01 |
| 2018-08-01 |
+------------+
5 rows in set (0.00 sec)

추가 팁: 다른 방법들

DATE_FORMAT() 외에도 MySQL에서는 여러 가지 방법으로 월의 첫날을 구할 수 있습니다.

  • DATE_SUB + DAYOFMONTH 조합: DATE_SUB(yourDate, INTERVAL DAYOFMONTH(yourDate)-1 DAY)를 사용하면 해당 월의 첫날을 datetime 타입 그대로 얻을 수 있습니다.
  • LAST_DAY 함수 응용: DATE_SUB(LAST_DAY(yourDate), INTERVAL DAY(LAST_DAY(yourDate))-1 DAY) 방식도 가능합니다.

단순히 문자열 형태의 'YYYY-MM-01' 값만 필요하다면 DATE_FORMAT()이 가장 간결하고 직관적인 선택입니다. 반면 날짜 연산을 추가로 수행해야 한다면 DATE_SUB 방식이 유용할 수 있습니다.