MySQL에서 DATE_ADD() 함수를 사용하면 다른 열의 값을 기준으로 날짜를 손쉽게 증가시킬 수 있습니다. 이번 글에서는 실제 예제를 통해 그 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 DueDate(마감일) 열과, 사용자가 결제 제출을 위해 몇 번이나 알림을 받았는지를 나타내는 RepeatTime 열을 가진 테이블을 생성해 보겠습니다.
mysql> create table DemoTable
-> (
-> DueDate date,
-> RepeatTime int
-> );
Query OK, 0 rows affected (0.57 sec)2. 데이터 삽입하기
INSERT 명령을 사용하여 테이블에 몇 개의 레코드를 삽입합니다.
mysql> insert into DemoTable values('2019-01-23',3);
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-06-22',6);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2019-03-28',2);
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable values('2017-07-25',6);
Query OK, 1 row affected (0.15 sec)3. 전체 레코드 조회하기
SELECT 문을 사용하여 테이블의 모든 레코드를 확인합니다.
mysql> select *from DemoTable;
출력 결과
+------------+------------+ | DueDate | RepeatTime | +------------+------------+ | 2019-01-23 | 3 | | 2019-06-22 | 6 | | 2019-03-28 | 2 | | 2017-07-25 | 6 | +------------+------------+ 4 rows in set (0.00 sec)
4. 다른 열의 값을 기준으로 날짜 증가시키기
아래 쿼리는 RepeatTime 열의 값을 기준으로 DueDate 날짜를 월(MONTH) 단위로 증가시킵니다. 이때 WHERE 절을 사용하여 RepeatTime 값이 6이 아닌 행만 업데이트합니다.
mysql> update DemoTable set DueDate=date_add(DueDate,interval RepeatTime MONTH) where RepeatTime!=6; Query OK, 2 rows affected (0.25 sec) Rows matched: 2 Changed: 2 Warnings: 0
5. 업데이트 결과 확인하기
업데이트 후 테이블의 레코드를 다시 한번 조회해 보겠습니다.
mysql> select *from DemoTable;
출력 결과
+------------+------------+ | DueDate | RepeatTime | +------------+------------+ | 2019-04-23 | 3 | | 2019-06-22 | 6 | | 2019-05-28 | 2 | | 2017-07-25 | 6 | +------------+------------+ 4 rows in set (0.00 sec)
결과 분석
위 출력 결과를 보면 DATE_ADD() 함수가 정상적으로 작동한 것을 확인할 수 있습니다.
- 2019-01-23 (RepeatTime: 3) → 3개월이 추가되어 2019-04-23으로 변경되었습니다.
- 2019-03-28 (RepeatTime: 2) → 2개월이 추가되어 2019-05-28으로 변경되었습니다.
RepeatTime값이 6인 두 행은 WHERE 조건에 해당하지 않으므로 변경되지 않았습니다.
이처럼 DATE_ADD() 함수와 INTERVAL 구문을 활용하면 다른 열의 값을 동적으로 참조하여 날짜를 계산할 수 있으며, 조건부 UPDATE 문과 함께 사용하면 원하는 행만 선택적으로 처리할 수 있습니다.