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

MySQL에서 날짜 형식을 변환하는 방법 – STR_TO_DATE 함수 완벽 가이드

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 형식으로 변환하여 정렬, 비교, 날짜 연산까지 자유롭게 활용할 수 있습니다.