MySQL에서 'dd/mm/yyyy' 형식으로 저장된 문자열 날짜를 'yyyymmdd' 형식으로 변환하려면 STR_TO_DATE() 함수와 DATE_FORMAT() 함수를 함께 사용하면 됩니다. 먼저 STR_TO_DATE()로 문자열을 날짜 타입으로 파싱한 뒤, DATE_FORMAT()으로 원하는 출력 형식을 지정하는 방식입니다.
1단계: 테이블 생성하기
먼저 데모용 테이블을 생성합니다.
mysql> create table DemoTable
(
Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
Admissiondate varchar(200)
);
Query OK, 0 rows affected (0.54 sec)2단계: 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into DemoTable(Admissiondate) values('21/10/2014');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(Admissiondate) values('01/12/2016');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(Admissiondate) values('31/01/2017');
Query OK, 1 row affected (0.14 sec)3단계: 저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 출력합니다.
+----+---------------+ | Id | Admissiondate | +----+---------------+ | 1 | 21/10/2014 | | 2 | 01/12/2016 | | 3 | 31/01/2017 | +----+---------------+ 3 rows in set (0.00 sec)
4단계: 날짜 형식 변환하기
'dd/mm/yyyy' 형식을 'yyyymmdd' 형식으로 변환하는 핵심 쿼리는 다음과 같습니다.
mysql> select date_format(str_to_date(Admissiondate,'%d/%m/%Y'),'%Y%m%d') from DemoTable;
실행 결과는 다음과 같습니다.
+-------------------------------------------------------------+ | date_format(str_to_date(Admissiondate,'%d/%m/%Y'),'%Y%m%d') | +-------------------------------------------------------------+ | 20141021 | | 20161201 | | 20170131 | +-------------------------------------------------------------+ 3 rows in set (0.00 sec)
쿼리 동작 원리
- STR_TO_DATE(Admissiondate, '%d/%m/%Y') : varchar로 저장된 문자열을 '%d/%m/%Y' 형식에 맞춰 해석하여 실제 DATE 타입 값으로 변환합니다.
- DATE_FORMAT(..., '%Y%m%d') : 변환된 날짜 값을 연월일이 붙어 있는 8자리 숫자 형태(예: 20141021)로 출력합니다.
참고: 주요 포맷 지정자
- %d — 일(day), 두 자리 표기 (01~31)
- %m — 월(month), 두 자리 표기 (01~12)
- %Y — 연도(year), 네 자리 표기
응용: 테이블 데이터를 영구적으로 변경하기
단순히 조회 결과만 변환하는 것이 아니라 테이블에 저장된 값을 그대로 바꾸고 싶다면 UPDATE 문을 활용할 수 있습니다.
mysql> update DemoTable
set Admissiondate = date_format(str_to_date(Admissiondate,'%d/%m/%Y'),'%Y%m%d');
Query OK, 3 rows affected (0.10 sec)
Rows matched: 3 Changed: 3 Warnings: 0이처럼 STR_TO_DATE()와 DATE_FORMAT()의 조합은 서로 다른 날짜 형식 간의 변환에 매우 유용하게 활용됩니다. 다만, 애초에 날짜 컬럼은 VARCHAR가 아닌 DATE 타입으로 설계하는 것이 정렬·비교·인덱스 활용 면에서 더 바람직하다는 점도 함께 기억해 두시길 권장합니다.