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

MySQL에서 시간은 유지한 채 날짜만 변경하는 방법

MySQL에서 datetime 값의 시간은 그대로 유지하면서 날짜만 변경하고 싶다면 INTERVAL과 함께 YEAR, MONTH, DAY 등의 단위를 활용하면 됩니다. 레코드를 수정해야 하므로 UPDATE 문과 함께 INTERVAL을 사용해 새로운 값을 설정합니다.

예제 테이블 생성하기

먼저 예제로 사용할 테이블을 만들어 보겠습니다.

mysql> create table DemoTable
(
    DueDate datetime
);
Query OK, 0 rows affected (0.56 sec)

샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 몇 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('2017-08-12 10:30:45');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2015-09-21 12:00:00');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable values('2018-12-31 11:45:56');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2016-01-02 01:23:04');
Query OK, 1 row affected (0.14 sec)

현재 데이터 확인하기

SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.

mysql> select *from DemoTable;

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

+---------------------+
| DueDate             |
+---------------------+
| 2017-08-12 10:30:45 |
| 2015-09-21 12:00:00 |
| 2018-12-31 11:45:56 |
| 2016-01-02 01:23:04 |
+---------------------+
4 rows in set (0.00 sec)

시간은 유지하고 날짜만 변경하는 쿼리

이제 시간 값은 그대로 두고 날짜(연도)만 변경하는 쿼리입니다. DUEDate + INTERVAL 1 YEAR처럼 기존 값에 인터벌을 더하면 시간 부분은 자동으로 보존됩니다.

mysql> update DemoTable
    set DueDate=DueDate+interval 1 year;
Query OK, 4 rows affected (0.16 sec)
Rows matched : 4  Changed : 4  Warnings : 0

변경 결과 확인하기

테이블의 레코드를 다시 한번 조회해 결과를 확인해 보겠습니다.

mysql> select *from DemoTable;

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

+---------------------+
| DueDate             |
+---------------------+
| 2018-08-12 10:30:45 |
| 2016-09-21 12:00:00 |
| 2019-12-31 11:45:56 |
| 2017-01-02 01:23:04 |
+---------------------+
4 rows in set (0.00 sec)

출력 결과를 보면 모든 레코드의 연도가 정확히 1년씩 증가했지만, 시·분·초 값은 원본 그대로 유지된 것을 확인할 수 있습니다.

참고: 다른 날짜 단위 활용하기

같은 방식으로 INTERVAL 1 MONTH(월), INTERVAL 1 DAY(일) 등 다양한 단위를 사용할 수 있으며, 음수 값을 넣으면 과거 날짜로 변경할 수도 있습니다. 예를 들어 set DueDate=DueDate - interval 1 year;처럼 작성하면 연도가 1년 감소합니다.