MySQL DATE_ADD() 함수로 날짜를 1년씩 증가시키기
MySQL에 저장된 날짜(datetime) 데이터를 일괄적으로 1년씩 증가시키고 싶다면, 내장 함수인 DATE_ADD()와 INTERVAL 키워드를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
UPDATE yourTableName SET
yourDateColumnName = DATE_ADD(yourDateColumnName, INTERVAL 1 YEAR);
WHERE 절 없이 실행하면 테이블의 모든 행에 적용되며, 특정 조건의 행만 수정하고 싶다면 뒤에서 설명할 것처럼 WHERE 절을 추가하면 됩니다.
1단계: 테스트용 테이블 생성
먼저 실습을 위한 테이블을 생성합니다. 아래 쿼리는 Id와 DueDate 두 개의 컬럼을 가진 테이블을 만듭니다.
mysql> create table UpdateDate
-> (
-> Id int,
-> DueDate datetime
-> );
Query OK, 0 rows affected (0.76 sec)
2단계: 샘플 데이터 삽입
INSERT 명령으로 몇 개의 레코드를 입력합니다.
mysql> insert into UpdateDate values(1001,'2012-5-21');
Query OK, 1 row affected (0.17 sec)
mysql> insert into UpdateDate values(1002,'2013-8-2');
Query OK, 1 row affected (0.17 sec)
mysql> insert into UpdateDate values(1003,'2014-2-27');
Query OK, 1 row affected (0.10 sec)
mysql> insert into UpdateDate values(1004,'2016-11-1');
Query OK, 1 row affected (0.18 sec)
mysql> insert into UpdateDate values(1005,'2017-12-24');
Query OK, 1 row affected (0.12 sec)
3단계: 현재 데이터 확인
SELECT 문으로 전체 레코드를 조회해 보겠습니다.
mysql> select * from UpdateDate;
출력 결과
+------+---------------------+
| Id | DueDate |
+------+---------------------+
| 1001 | 2012-05-21 00:00:00 |
| 1002 | 2013-08-02 00:00:00 |
| 1003 | 2014-02-27 00:00:00 |
| 1004 | 2016-11-01 00:00:00 |
| 1005 | 2017-12-24 00:00:00 |
+------+---------------------+
5 rows in set (0.00 sec)
4단계: DATE_ADD()로 날짜 1년씩 증가
이제 DATE_ADD() 함수와 INTERVAL을 사용하여 DueDate 컬럼의 모든 값을 1년씩 증가시킵니다.
mysql> update UpdateDate set DueDate=date_add(DueDate,interval 1 year);
Query OK, 5 rows affected (0.15 sec)
Rows matched: 5 Changed: 5 Warnings: 0
5단계: 업데이트 결과 확인
다시 SELECT 문으로 테이블을 조회합니다.
mysql> select * from UpdateDate;
출력 결과
+------+---------------------+
| Id | DueDate |
+------+---------------------+
| 1001 | 2013-05-21 00:00:00 |
| 1002 | 2014-08-02 00:00:00 |
| 1003 | 2015-02-27 00:00:00 |
| 1004 | 2017-11-01 00:00:00 |
| 1005 | 2018-12-24 00:00:00 |
+------+---------------------+
5 rows in set (0.00 sec)
위 출력 결과를 보면 모든 날짜가 정확히 1년씩 증가한 것을 확인할 수 있습니다.
특정 행만 업데이트하는 방법
전체 데이터가 아니라 특정 날짜나 특정 레코드만 수정하고 싶다면 WHERE 조건을 추가하면 됩니다. 예를 들어 Id가 1001인 행만 1년 증가시키려면 다음과 같이 작성합니다.
mysql> update UpdateDate
-> set DueDate = date_add(DueDate, interval 1 year)
-> where Id = 1001;
참고: 다양한 INTERVAL 활용
INTERVAL에는 'year' 외에도 month, day, hour, minute 등 다양한 단위를 사용할 수 있으며, 음수 값을 넣으면 날짜를 감소시킬 수도 있습니다. 또한 DATE_ADD() 대신 더하기 연산자를 사용한 DueDate + INTERVAL 1 YEAR 형식도 동일하게 동작합니다.