STR_TO_DATE() 함수란?
MySQL에서 날짜 형식을 변환하려면 STR_TO_DATE() 함수를 사용하면 됩니다. 이 함수는 '11.01.2019'처럼 문자열로 저장된 날짜 데이터를 해석하여 실제 DATE 타입 값으로 바꿔 주며, 형식 지정자(format specifier)를 통해 입력 문자열의 구조를 지정합니다. 모든 형식 지정자는 % 기호로 시작합니다.
SELECT STR_TO_DATE(yourDateColumnName,'%d.%m.%Y') as anyVariableName FROM yourTableName;
여기서 사용된 형식 지정자의 의미는 다음과 같습니다.
- %d : 일(day), 두 자리 숫자
- %m : 월(month), 두 자리 숫자
- %Y : 네 자리 연도(year)
예제 테이블 생성
문법을 직접 확인해 보기 위해 먼저 테이블을 생성하겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table ConvertIntoDateFormat
-> (
-> Id int NOT NULL AUTO_INCREMENT,
-> LoginDate varchar(30),
-> PRIMARY KEY(Id)
-> );
Query OK, 0 rows affected (0.47 sec)
LoginDate 컬럼은 varchar(30) 타입으로 선언되어 있기 때문에 날짜가 문자열 형태로 저장됩니다. 실무에서도 외부 시스템에서 가져온 데이터는 이처럼 문자열 컬럼에 담기는 경우가 많습니다.
샘플 데이터 삽입
INSERT 명령을 사용해 몇 개의 레코드를 추가합니다.
mysql> insert into ConvertIntoDateFormat(LoginDate) values('11.01.2019');
Query OK, 1 row affected (0.10 sec)
mysql> insert into ConvertIntoDateFormat(LoginDate) values('10.04.2017');
Query OK, 1 row affected (0.16 sec)
mysql> insert into ConvertIntoDateFormat(LoginDate) values('21.10.2016');
Query OK, 1 row affected (0.12 sec)
mysql> insert into ConvertIntoDateFormat(LoginDate) values('26.09.2018');
Query OK, 1 row affected (0.14 sec)
mysql> insert into ConvertIntoDateFormat(LoginDate) values('25.12.2012');
Query OK, 1 row affected (0.17 sec)
저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from ConvertIntoDateFormat;
실행 결과는 다음과 같습니다.
+----+------------+ | Id | LoginDate | +----+------------+ | 1 | 11.01.2019 | | 2 | 10.04.2017 | | 3 | 21.10.2016 | | 4 | 26.09.2018 | | 5 | 25.12.2012 | +----+------------+ 5 rows in set (0.00 sec)
YYYY-MM-DD 형식으로 변환하기
이제 STR_TO_DATE() 함수를 사용해 날짜를 YYYY-MM-DD 형식으로 변환하는 쿼리입니다.
mysql> select str_to_date(LoginDate,'%d.%m.%Y') as DateFormat from ConvertIntoDateFormat;
실행 결과를 보면 '11.01.2019'가 '2019-01-11'로 정상적으로 변환된 것을 확인할 수 있습니다.
+------------+ | DateFormat | +------------+ | 2019-01-11 | | 2017-04-10 | | 2016-10-21 | | 2018-09-26 | | 2012-12-25 | +------------+ 5 rows in set (0.00 sec)
DATE_FORMAT() 함수 활용하기
같은 목적이라면 DATE_FORMAT() 함수를 함께 사용할 수도 있습니다. STR_TO_DATE()로 문자열을 DATE 값으로 변환한 뒤, DATE_FORMAT()으로 원하는 출력 형식을 지정하는 방식입니다.
mysql> select DATE_FORMAT(STR_TO_DATE(LoginDate,'%d.%m.%Y'), '%Y-%m-%d') as DateFormat from
-> ConvertIntoDateFormat;
결과는 앞선 예제와 동일하게 YYYY-MM-DD 형식으로 출력됩니다.
+------------+ | DateFormat | +------------+ | 2019-01-11 | | 2017-04-10 | | 2016-10-21 | | 2018-09-26 | | 2012-12-25 | +------------+ 5 rows in set (0.00 sec)
정리하면, 문자열로 저장된 dd.mm.yyyy 형식의 날짜는 STR_TO_DATE() 함수 하나만으로도 DATE 타입으로 변환할 수 있으며, 출력 형식까지 세밀하게 제어하고 싶다면 DATE_FORMAT()을 조합해 사용하면 됩니다. 참고로 변환 결과를 실제 DATE 타입 컬럼에 영구적으로 저장하려면 ALTER TABLE로 컬럼 타입을 변경하거나 UPDATE 문으로 값을 갱신하는 방법도 고려할 수 있습니다.