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

MySQL에서 날짜의 월(Month)만 업데이트하는 방법

MySQL에서 날짜 데이터의 연도나 일은 그대로 두고 월(month)만 변경하고 싶을 때가 있습니다. 이럴 때는 MONTH() 함수와 DATE_ADD() 함수를 함께 활용하면 간단하게 처리할 수 있습니다.

1. 테이블 생성하기

먼저 예제로 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable861(AdmissionDate date);
Query OK, 0 rows affected (1.22 sec)

2. 샘플 데이터 삽입하기

INSERT 명령어를 사용해 날짜 데이터를 입력합니다. 모든 레코드가 1월인 것에 주목하세요.

mysql> insert into DemoTable861 values('2019-01-21');
Query OK, 1 row affected (0.31 sec)
mysql> insert into DemoTable861 values('2018-01-01');
Query OK, 1 row affected (0.49 sec)
mysql> insert into DemoTable861 values('2016-01-02');
Query OK, 1 row affected (1.27 sec)
mysql> insert into DemoTable861 values('2018-01-14');
Query OK, 1 row affected (0.47 sec)

3. 현재 데이터 확인하기

SELECT 문으로 저장된 전체 레코드를 조회합니다.

mysql> select *from DemoTable861;

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

+---------------+
| AdmissionDate |
+---------------+
| 2019-01-21    |
| 2018-01-01    |
| 2016-01-02    |
| 2018-01-14    |
+---------------+
4 rows in set (0.00 sec)

4. 월만 업데이트하는 쿼리

다음 쿼리는 MONTH() 함수로 1월인 데이터를 찾아, DATE_ADD()를 사용해 해당 날짜에서 한 달을 빼는 방식으로 월을 변경합니다.

mysql> update DemoTable861
   set AdmissionDate=date_add(AdmissionDate,Interval -1 month)
   where month(AdmissionDate)=01;
Query OK, 4 rows affected (0.42 sec)
Rows matched : 4 Changed : 4 Warnings : 0

참고: Interval -1 month 대신 원하는 값으로 조절할 수 있습니다. 예를 들어 Interval 2 month를 사용하면 두 달 뒤로 이동시킬 수 있으며, 특정 월로 직접 지정하려면 MAKEDATE(YEAR(AdmissionDate), 1) + INTERVAL 5 MONTH와 같은 방식도 활용 가능합니다.

5. 업데이트 결과 확인하기

변경된 데이터를 다시 조회해 보겠습니다.

mysql> select *from DemoTable861;

모든 레코드의 월이 1월에서 12월로 변경되었고, 연도와 일은 그대로 유지된 것을 확인할 수 있습니다.

+---------------+
| AdmissionDate |
+---------------+
| 2018-12-21    |
| 2017-12-01    |
| 2015-12-02    |
| 2017-12-14    |
+---------------+
4 rows in set (0.00 sec)

마무리

이처럼 MONTH() 함수로 조건을 걸고 DATE_ADD() 함수에 INTERVAL을 지정하면, 날짜의 나머지 부분은 그대로 유지하면서 월만 손쉽게 업데이트할 수 있습니다. 월 단위 데이터 정합성 보정이나 배치 작업 시 유용하게 활용해 보세요.