MySQL에서 문자열 형태로 저장된 날짜 데이터를 실제 날짜 값으로 변환하여 다루고 싶다면 STR_TO_DATE() 함수를 사용하는 것이 가장 간단한 방법입니다. 이 함수는 지정한 형식 문자열에 따라 텍스트를 날짜(DATE) 값으로 변환해 줍니다.
STR_TO_DATE() 기본 문법
SELECT STR_TO_DATE(yourColumnName, '%b %Y') FROM yourTableName;
위 문법에서 %b는 축약된 월 이름(예: Jan, Feb)을, %Y는 4자리 연도를 의미합니다. 즉, 'Jan 2018'과 같은 문자열을 '2018-01-00' 형태의 날짜로 변환할 수 있습니다.
실습 예제: 테이블 생성하기
먼저 예제에 사용할 테이블을 생성해 보겠습니다.
mysql> CREATE TABLE DemoTable
-> (
-> JoiningYear VARCHAR(20)
-> );
Query OK, 0 rows affected (0.69 sec)'JoiningYear'라는 varchar 타입의 컬럼 하나를 가진 간단한 테이블입니다.
샘플 데이터 삽입하기
INSERT 명령어를 사용해 몇 개의 레코드를 삽입합니다.
mysql> INSERT INTO DemoTable VALUES('Jan 2018');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('May 2107');
Query OK, 1 row affected (0.32 sec)
mysql> INSERT INTO DemoTable VALUES('Aug 2019');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO DemoTable VALUES('Oct 2020');
Query OK, 1 row affected (0.10 sec)저장된 데이터 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM DemoTable;
실행 결과는 다음과 같습니다.
+-------------+ | JoiningYear | +-------------+ | Jan 2018 | | May 2107 | | Aug 2019 | | Oct 2020 | +-------------+ 4 rows in set (0.00 sec)
현재까지의 데이터는 모두 문자열 형태로 저장되어 있습니다. 이제 이 값을 진짜 날짜 형식으로 변환해 보겠습니다.
STR_TO_DATE()로 날짜 변환하기
아래 쿼리를 실행하면 문자열로 저장된 날짜 레코드가 날짜 형식으로 변환됩니다.
mysql> SELECT STR_TO_DATE(JoiningYear, '%b %Y') FROM DemoTable;
실행 결과:
+----------------------------------+ | str_to_date(JoiningYear,'%b %Y') | +----------------------------------+ | 2018-01-00 | | 2107-05-00 | | 2019-08-00 | | 2020-10-00 | +----------------------------------+ 4 rows in set (0.05 sec)
결과 해석 및 참고 사항
출력 결과를 보면 'Jan 2018'이 '2018-01-00'으로 변환된 것을 확인할 수 있습니다. 일(day) 부분이 '00'으로 표시되는 이유는 원본 데이터에 일자 정보가 없기 때문입니다. MySQL은 일 정보가 없는 경우 기본값인 0일로 처리하며, 이는 MySQL의 허용 범위 내에서 유효한 값입니다.
만약 일자까지 포함된 완전한 날짜가 필요하다면, 형식 문자열에 %d를 추가하고 원본 데이터에 일 정보를 함께 저장하면 됩니다. 예를 들어 'Jan 15 2018'이라는 데이터라면 STR_TO_DATE(JoiningYear, '%b %d %Y')와 같이 사용할 수 있습니다.
또한, 자주 날짜 연산이나 정렬에 이 컬럼을 사용한다면, 데이터를 DATE 타입 컬럼에 직접 삽입하는 것을 고려해 보세요. INSERT 시점에 STR_TO_DATE()를 적용하면 처음부터 올바른 날짜 타입으로 저장할 수 있어 쿼리 성능과 데이터 무결성 면에서 유리합니다.