MySQL에서 DATE_ADD() 함수는 날짜나 시간 값에 특정 간격을 더할 때 사용됩니다. 그렇다면 하나의 쿼리에서 두 개 이상의 서로 다른 간격(예: 몇 개월 + 몇 년)을 동시에 더하려면 어떻게 해야 할까요? 가장 대표적인 방법은 DATE_ADD() 함수를 중첩해서 사용하는 것입니다.
현재 날짜 및 시간 확인하기
먼저 현재 날짜와 시간을 확인해 보겠습니다.
mysql> select now();
출력 결과
+---------------------+ | now() | +---------------------+ | 2019-06-15 12:24:06 | +---------------------+ 1 row in set (0.00 sec)
테이블 생성하기
예제 진행을 위해 먼저 테이블을 생성합니다.
mysql> create table DemoTable
->(
-> ArrivalDate datetime
-> );
Query OK, 0 rows affected (1.15 sec)여러 간격을 추가한 데이터 삽입하기
insert 명령을 사용해 테이블에 레코드를 삽입합니다. 아래 예제에서는 DATE_ADD() 함수를 중첩하여 여러 간격을 동시에 더하는 방식을 보여줍니다.
mysql> insert into DemoTable values(DATE_ADD(DATE_ADD(NOW(), INTERVAL 6 MONTH), INTERVAL 1 YEAR)); Query OK, 1 row affected (0.13 sec) mysql> insert into DemoTable values(DATE_ADD(DATE_ADD(NOW(), INTERVAL 3 MONTH), INTERVAL 4 YEAR)); Query OK, 1 row affected (0.16 sec)
첫 번째 쿼리는 현재 시각에 6개월을 더한 뒤 다시 1년을 추가하고, 두 번째 쿼리는 3개월을 더한 뒤 4년을 추가합니다. 즉, 안쪽 DATE_ADD()가 먼저 실행되고 그 결과값에 바깥쪽 DATE_ADD()가 적용되는 구조입니다.
결과 확인하기
select 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
출력 결과
+---------------------+ | ArrivalDate | +---------------------+ | 2020-12-15 12:23:39 | | 2023-09-15 12:23:48 | +---------------------+ 2 rows in set (0.00 sec)
정리
DATE_ADD()를 중첩하면 월(MONTH), 연(YEAR), 일(DAY) 등 서로 다른 단위의 간격을 하나의 SQL 문 안에서 자유롭게 조합할 수 있습니다. 참고로 NOW() + INTERVAL 6 MONTH + INTERVAL 1 YEAR처럼 INTERVAL 표현식을 덧셈 연산자로 연결하는 방법도 동일한 결과를 얻을 수 있으므로, 상황에 맞게 선택하여 사용하면 됩니다.