STR_TO_DATE() 함수로 날짜 형식 변환하기
MySQL에서 '09/18'처럼 월/연도(MM/YY)만 저장된 문자열을 '2018-09-24'와 같은 완전한 날짜 형식(YYYY-MM-DD)으로 변환해야 하는 경우가 있습니다. 이럴 때는 STR_TO_DATE() 함수를 사용하면 간단하게 해결할 수 있습니다.
핵심 아이디어는 일(day)에 해당하는 값이 없기 때문에, CONCAT() 함수를 이용해 원하는 일자를 문자열 뒤에 붙여준 뒤 날짜로 변환하는 것입니다.
SELECT STR_TO_DATE(CONCAT('일자값/', 컬럼명), '%d/%m/%y') AS 별칭
FROM 테이블명;형식 지정자 '%d/%m/%y'는 입력 문자열이 '일/월/연도(두 자리)' 순서로 구성되어 있음을 의미합니다.
1. 예제 테이블 생성
먼저 실습용 테이블을 만들어 보겠습니다.
mysql> CREATE TABLE demo46 (
-> id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> short_date VARCHAR(20)
-> );
Query OK, 0 rows affected (0.60 sec)2. 샘플 데이터 삽입
INSERT 문을 사용해 MM/YY 형식의 날짜 데이터를 몇 개 넣어 보겠습니다.
mysql> INSERT INTO demo46(short_date) VALUES('09/18');
Query OK, 1 row affected (0.08 sec)
mysql> INSERT INTO demo46(short_date) VALUES('12/20');
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO demo46(short_date) VALUES('11/20');
Query OK, 1 row affected (0.20 sec)3. 저장된 데이터 확인
SELECT 문으로 테이블의 내용을 조회합니다.
mysql> SELECT * FROM demo46;
실행 결과는 다음과 같습니다.
+----+------------+ | id | short_date | +----+------------+ | 1 | 09/18 | | 2 | 12/20 | | 3 | 11/20 | +----+------------+ 3 rows in set (0.00 sec)
4. MM/YY를 YYYY-MM-DD로 변환하는 쿼리
이제 실제 변환 쿼리입니다. 여기서는 일자를 '24'로 지정하여 앞에 연결한 후 변환했습니다.
mysql> SELECT STR_TO_DATE(CONCAT('24/', short_date), '%d/%m/%y') AS Convert_In_Full_Date
-> FROM demo46;실행 결과는 다음과 같습니다.
+----------------------+ | Convert_In_Full_Date | +----------------------+ | 2018-09-24 | | 2020-12-24 | | 2020-11-24 | +----------------------+ 3 rows in set (0.00 sec)
정리
'09/18'은 %m/%y 형식 해석에 따라 2018년 9월로 변환되고, '12/20'은 2020년 12월로 변환된 것을 확인할 수 있습니다. 두 자리 연도(%y)는 MySQL이 자동으로 적절한 세기를 판단하여 처리해 주므로 별도의 가공 없이 편리하게 사용할 수 있습니다.
이 방법은 유효기간, 만료일 등 월과 연도 정보만 있는 데이터를 정렬하거나 날짜 연산에 활용해야 할 때 특히 유용합니다. 다만 일자 값은 임의로 지정되는 것이므로, 업무 로직에 맞게 적절한 기본값(예: 해당 월의 첫날 또는 마지막 날)을 선택하는 것이 좋습니다.