MySQL에서 문자열로 저장된 날짜 데이터를 년-월-일(YYYY-MM-DD) 형식으로 변환하려면 STR_TO_DATE() 함수와 DATE_FORMAT() 함수를 함께 사용하면 됩니다. 이 글에서는 실제 예제를 통해 변환 과정을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 날짜 문자열을 저장할 테이블을 생성합니다. 여기서는 날짜가 varchar 타입으로 저장되어 있다고 가정합니다.
mysql> create table DemoTable666(AdmissionDate varchar(200)); Query OK, 0 rows affected (0.57 sec)
2. 샘플 데이터 삽입하기
INSERT 명령을 사용하여 다양한 형식의 날짜 문자열을 테이블에 입력합니다.
mysql> insert into DemoTable666 values('Sat,20 Jul 2019 04:29:35');
Query OK, 1 row affected (1.12 sec)
mysql> insert into DemoTable666 values('Fri,02 Oct 2018 12:19:15');
Query OK, 1 row affected (1.05 sec)
mysql> insert into DemoTable666 values('Sun,01 Aug 2016 11:10:05');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable666 values('Fri, 06 Nov 2015 04:06:05 -0500');
Query OK, 1 row affected (0.24 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable666;
위 쿼리는 다음과 같은 결과를 출력합니다.
+---------------------------------+ | AdmissionDate | +---------------------------------+ | Sat,20 Jul 2019 04:29:35 | | Fri,02 Oct 2018 12:19:15 | | Sun,01 Aug 2016 11:10:05 | | Fri, 06 Nov 2015 04:06:05 -0500 | +---------------------------------+ 4 rows in set (0.00 sec)
4. 년-월-일 형식으로 변환하기
날짜 형식을 변환하는 핵심 쿼리는 다음과 같습니다.
mysql> select DATE_FORMAT(STR_TO_DATE(AdmissionDate, '%a, %d %b %Y %H:%i:%S'),'%Y-%m-%d %H:%i:%s') AS MyDate from DemoTable666;
실행 결과는 아래와 같습니다.
+---------------------+ | MyDate | +---------------------+ | 2019-07-20 04:29:35 | | 2018-10-02 12:19:15 | | 2016-08-01 11:10:05 | | 2015-11-06 04:06:05 | +---------------------+ 4 rows in set, 1 warning (0.00 sec)
형식 지정자 설명
위 쿼리에서 사용된 주요 형식 지정자는 다음과 같습니다.
- %a — 요일 약어 (Sat, Fri, Sun 등)
- %d — 일 (01~31)
- %b — 월 이름 약어 (Jul, Oct, Aug 등)
- %Y — 4자리 연도
- %H — 시간 (00~23)
- %i — 분 (00~59)
- %S — 초 (00~59)
즉, STR_TO_DATE()가 'Sat,20 Jul 2019 04:29:35' 같은 문자열을 MySQL이 인식할 수 있는 날짜 값으로 파싱하고, DATE_FORMAT()이 그 값을 '%Y-%m-%d %H:%i:%s' 패턴에 맞춰 최종적으로 2019-07-20 04:29:35 형태로 출력해 줍니다.
참고로 네 번째 레코드처럼 타임존 정보(-0500)가 포함된 경우 경고(warning)가 발생할 수 있지만, 날짜와 시간 부분은 정상적으로 변환됩니다. 만약 타임존까지 완벽하게 처리해야 한다면 입력 문자열에서 타임존 부분을 제거하거나 별도로 처리하는 것이 좋습니다.