MySQL에서 날짜에 일수 추가하기
MySQL에서 특정 날짜에 일수를 더하려면 DATE_ADD() 함수를 사용하면 됩니다. 날짜에 일을 추가하는 기본 문법은 다음과 같습니다.
INSERT INTO yourTableName VALUES(DATE_ADD(now(), interval n day));
위 문법에서는 now() 대신 curdate()를 사용할 수도 있습니다. 두 함수의 차이점은 다음과 같습니다.
- now() : 현재 날짜와 시간을 모두 저장합니다.
- curdate() : 현재 날짜만 저장하며, 시간은 00:00:00으로 기록됩니다.
예제 테이블 생성
위 문법을 실제로 이해하기 위해 먼저 데모용 테이블을 생성해 보겠습니다.
mysql> create table addingDaysDemo
-> (
-> yourDateTime datetime
-> );
Query OK, 0 rows affected (1.09 sec)
INSERT 문으로 날짜에 일수 더하기
이제 INSERT 문에서 now()와 curdate() 두 함수를 모두 사용하고, interval 키워드로 더할 일수를 지정해 보겠습니다. 각각 1일, 4일, 5일, 7일, 9일을 추가한 데이터를 삽입합니다.
mysql> insert into addingDaysDemo values(date_add(now(),interval 1 day)); Query OK, 1 row affected (0.14 sec) mysql> insert into addingDaysDemo values(date_add(now(),interval 4 day)); Query OK, 1 row affected (0.17 sec) mysql> insert into addingDaysDemo values(date_add(now(),interval 5 day)); Query OK, 1 row affected (0.14 sec) mysql> insert into addingDaysDemo values(date_add(now(),interval 7 day)); Query OK, 1 row affected (0.17 sec) mysql> insert into addingDaysDemo values(date_add(now(),interval 9 day)); Query OK, 1 row affected (0.15 sec) mysql> insert into addingDaysDemo values(date_add(curdate(),interval 1 day)); Query OK, 1 row affected (0.18 sec) mysql> insert into addingDaysDemo values(date_add(curdate(),interval 4 day)); Query OK, 1 row affected (0.16 sec) mysql> insert into addingDaysDemo values(date_add(curdate(),interval 5 day)); Query OK, 1 row affected (0.17 sec) mysql> insert into addingDaysDemo values(date_add(curdate(),interval 7 day)); Query OK, 1 row affected (0.12 sec) mysql> insert into addingDaysDemo values(date_add(curdate(),interval 9 day)); Query OK, 1 row affected (0.15 sec)
결과 확인하기
SELECT 문을 사용해 테이블의 모든 레코드를 조회합니다.
mysql> select * from addingDaysDemo;
실행 결과는 다음과 같습니다.
+---------------------+ | yourDateTime | +---------------------+ | 2018-12-14 15:36:57 | | 2018-12-17 15:37:06 | | 2018-12-18 15:37:12 | | 2018-12-20 15:37:17 | | 2018-12-22 15:37:21 | | 2018-12-14 00:00:00 | | 2018-12-17 00:00:00 | | 2018-12-18 00:00:00 | | 2018-12-20 00:00:00 | | 2018-12-22 00:00:00 | +---------------------+ 10 rows in set (0.00 sec)
출력 결과를 보면 차이점을 명확하게 알 수 있습니다. now()를 사용한 레코드에는 시간 정보까지 함께 저장되어 있고, curdate()를 사용한 레코드는 시간이 00:00:00으로 고정되어 있습니다. 따라서 날짜와 시간이 모두 필요한 경우에는 now(), 순수하게 날짜만 다룰 때는 curdate()를 사용하는 것이 좋습니다.