MySQL에서 varchar 타입으로 저장된 날짜 문자열은 정렬이나 비교 연산에 제약이 많습니다. 이럴 때 STR_TO_DATE() 함수를 사용하면 문자열을 표준 DATETIME 형식으로 손쉽게 변환할 수 있습니다. 이번 글에서는 실제 예제를 통해 날짜 형식을 변환하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 날짜 값을 varchar 타입으로 저장할 테이블을 생성합니다.
mysql> create table DemoTable(DueDate varchar(100)); Query OK, 0 rows affected (0.78 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 다양한 형식의 날짜 문자열을 입력합니다.
mysql> insert into DemoTable values('10-01-2019 10:19:20');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable values('12-03-2018 11:00:00');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('02-23-2018 04:20:40');
Query OK, 1 row affected (0.19 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+---------------------+ | DueDate | +---------------------+ | 10-01-2019 10:19:20 | | 12-03-2018 11:00:00 | | 02-23-2018 04:20:40 | +---------------------+ 3 rows in set (0.00 sec)
현재 날짜가 '월-일-년 시:분:초' 형태의 단순 문자열로 저장되어 있어, 이 상태로는 날짜 연산이 불가능합니다.
4. STR_TO_DATE로 날짜 형식 변환하기
다음 쿼리는 REPLACE 함수와 STR_TO_DATE 함수를 조합하여 문자열 날짜를 표준 DATETIME 형식으로 변환합니다.
mysql> SELECT STR_TO_DATE(REPLACE(DueDate,"'",''), '%c-%e-%Y %T') from DemoTable;
실행 결과는 다음과 같습니다.
+-----------------------------------------------------+ | STR_TO_DATE(REPLACE(DueDate,"'",''), '%c-%e-%Y %T') | +-----------------------------------------------------+ | 2019-10-01 10:19:20 | | 2018-12-03 11:00:00 | | 2018-02-23 04:20:40 | +-----------------------------------------------------+ 3 rows in set (0.00 sec)
형식 지정자(Format Specifier) 정리
위 쿼리에서 사용된 주요 형식 지정자의 의미는 다음과 같습니다.
- %c — 월(1~12), 앞자리 0 생략
- %e — 일(1~31), 앞자리 0 생략
- %Y — 4자리 연도
- %T — 24시간제 시간(hh:mm:ss)
REPLACE 함수는 문자열에 포함될 수 있는 따옴표 등의 불필요한 문자를 제거하는 역할을 합니다. 이처럼 STR_TO_DATE 함수를 활용하면 다양한 형식의 날짜 문자열을 MySQL이 인식할 수 있는 DATETIME 값으로 깔끔하게 변환할 수 있으며, 이후 DATE_ADD, DATEDIFF 같은 날짜 함수도 자유롭게 사용할 수 있습니다.