MySQL 날짜 형식 변환이 필요한 이유
실무에서 데이터를 다루다 보면 '2015-21-01'처럼 연도-일-월 순서로 저장된 비표준 날짜 문자열을 자주 만나게 됩니다. 이런 값은 VARCHAR 타입으로 저장되어 있기 때문에 날짜 연산이나 정렬에 바로 사용할 수 없습니다. 이때 MySQL의 STR_TO_DATE() 함수를 사용하면 문자열을 올바른 DATE 형식으로 손쉽게 변환할 수 있습니다.
1. 테이블 생성하기
먼저 날짜가 문자열로 저장된 테이블을 생성해 보겠습니다.
mysql> create table DemoTable630 (ArrivalDate varchar(100));
Query OK, 0 rows affected (0.55 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 '연도-일-월' 형식의 날짜 데이터를 입력합니다.
mysql> insert into DemoTable630 values('2015-21-01');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable630 values('2018-25-12');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable630 values('2019-15-07');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable630 values('2016-31-03');
Query OK, 1 row affected (0.17 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회합니다.
mysql> select *from DemoTable630;
실행 결과는 다음과 같습니다.
+-------------+
| ArrivalDate |
+-------------+
| 2015-21-01 |
| 2018-25-12 |
| 2019-15-07 |
| 2016-31-03 |
+-------------+
4 rows in set (0.00 sec)
4. STR_TO_DATE()로 날짜 형식 변환하기
아래 쿼리는 STR_TO_DATE() 함수를 사용해 '연도-일-월' 형식의 문자열을 표준 DATE 형식으로 변환합니다.
mysql> select str_to_date(ArrivalDate,'%Y-%d-%m') from DemoTable630;
변환 결과는 다음과 같습니다.
+-------------------------------------+
| str_to_date(ArrivalDate,'%Y-%d-%m') |
+-------------------------------------+
| 2015-01-21 |
| 2018-12-25 |
| 2019-07-15 |
| 2016-03-31 |
+-------------------------------------+
4 rows in set (0.00 sec)
형식 지정자(Format Specifier) 정리
STR_TO_DATE() 함수에서 사용된 주요 형식 지정자는 다음과 같습니다.
- %Y – 4자리 연도 (예: 2025)
- %d – 일(Day), 2자리 숫자 (예: 01~31)
- %m – 월(Month), 2자리 숫자 (예: 01~12)
추가 팁: UPDATE로 실제 데이터 변경하기
조회 결과만 변환하는 것이 아니라 테이블의 값을 영구적으로 변경하고 싶다면 UPDATE 문과 함께 사용할 수 있습니다.
mysql> update DemoTable630
set ArrivalDate = str_to_date(ArrivalDate, '%Y-%d-%m');
Query OK, 4 rows affected (0.10 sec)
단, 컬럼이 VARCHAR 타입인 경우 DATE 객체 그대로 저장되지 않고 문자열로 변환되어 저장됩니다. 날짜 연산을 본격적으로 활용하려면 컬럼 타입 자체를 DATE로 변경하는 것이 좋습니다.
mysql> alter table DemoTable630 modify ArrivalDate date;
마무리
MySQL에서 잘못된 형식으로 저장된 날짜 문자열은 STR_TO_DATE() 함수 하나면 깔끔하게 해결됩니다. 원본 문자열의 구조(%Y-%d-%m 등)만 정확히 지정해 주면, 표준 DATE 형식으로 변환하여 정렬, 비교, 날짜 연산까지 자유롭게 활용할 수 있습니다.