MySQL에서 날짜 데이터의 연도(year) 부분만 변경하려면 DATE_FORMAT() 함수를 UPDATE 명령과 함께 사용하면 됩니다. 이 방법을 사용하면 월과 일은 그대로 유지한 채 연도 값만 손쉽게 바꿀 수 있습니다.
기본 문법
UPDATE 테이블이름 SET 날짜컬럼이름 = DATE_FORMAT(날짜컬럼이름, '변경할연도-%m-%d');
예제 테이블 생성
문법을 실제로 이해하기 위해 예제 테이블을 먼저 만들어 보겠습니다. 아래 쿼리로 테이블을 생성합니다.
mysql> create table ChangeYear
-> (
-> id int not null auto_increment,
-> ArrivalTime date,
-> PRIMARY KEY(id)
-> );
Query OK, 0 rows affected (0.83 sec)샘플 데이터 입력
INSERT 명령을 사용해 몇 개의 레코드를 입력합니다. 다양한 형태의 날짜 값을 넣어 보겠습니다.
mysql> insert into ChangeYear(ArrivalTime) values(date_add(now(),interval -2 year));
Query OK, 1 row affected, 1 warning (0.20 sec)
mysql> insert into ChangeYear(ArrivalTime) values('2012-10-24');
Query OK, 1 row affected (0.18 sec)
mysql> insert into ChangeYear(ArrivalTime) values('2016-3-21');
Query OK, 1 row affected (0.19 sec)
mysql> insert into ChangeYear(ArrivalTime) values('2015-4-24');
Query OK, 1 row affected (0.20 sec)
mysql> insert into ChangeYear(ArrivalTime) values(curdate());
Query OK, 1 row affected (0.20 sec)입력된 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from ChangeYear;
실행 결과는 다음과 같습니다.
+----+-------------+ | id | ArrivalTime | +----+-------------+ | 1 | 2017-01-07 | | 2 | 2012-10-24 | | 3 | 2016-03-21 | | 4 | 2015-04-24 | | 5 | 2019-01-07 | +----+-------------+ 5 rows in set (0.00 sec)
연도만 변경하는 UPDATE 쿼리
이제 날짜 컬럼에서 연도만 변경하는 쿼리를 실행해 보겠습니다. 예제에서는 모든 레코드의 연도를 2019년으로 바꿔 보겠습니다.
mysql> update ChangeYear
-> set ArrivalTime = DATE_FORMAT(ArrivalTime,'2019-%m-%d');
Query OK, 4 rows affected (0.12 sec)
Rows matched - 5 Changed - 4 Warnings - 0참고로 'Rows matched - 5, Changed - 4'로 표시된 것은 이미 2019년이었던 첫 번째 행(id=1)은 실질적인 변경이 없었기 때문입니다.
변경 결과 확인
다시 SELECT 문으로 업데이트된 레코드를 확인해 보겠습니다.
mysql> select *from ChangeYear;
아래 출력 결과에서 볼 수 있듯이, 모든 레코드의 연도가 2019로 변경되었지만 월과 일은 원래 값 그대로 유지되었습니다.
+----+-------------+ | id | ArrivalTime | +----+-------------+ | 1 | 2019-01-07 | | 2 | 2019-10-24 | | 3 | 2019-03-21 | | 4 | 2019-04-24 | | 5 | 2019-01-07 | +----+-------------+ 5 rows in set (0.00 sec)
정리
MySQL에서 날짜의 연도만 변경할 때는 DATE_FORMAT() 함수에 새로운 연도 값과 기존 월·일을 나타내는 포맷 문자열('%m-%d')을 조합하여 UPDATE 문에 적용하면 됩니다. 이 방식은 대량의 날짜 데이터에서 특정 연도를 일괄 수정해야 할 때 매우 유용합니다.