MySQL에서 'Jan 2017', 'May 2018'처럼 축약된 월 이름과 연도로 구성된 문자열을 실제 날짜 값으로 변환하려면 STR_TO_DATE() 함수와 DATE_FORMAT() 함수를 함께 사용하면 됩니다.
1. 예제 테이블 생성
먼저 날짜 문자열을 저장할 테이블을 생성합니다.
mysql> create table DemoTable1985
(
DueDate varchar(20)
);
Query OK, 0 rows affected (0.00 sec)2. 샘플 데이터 삽입
insert 명령을 사용하여 테이블에 레코드를 추가합니다.
mysql> insert into DemoTable1985 values('Jan 2017');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1985 values('May 2018');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1985 values('Aug 2015');
Query OK, 1 row affected (0.00 sec)3. 데이터 확인
select 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1985;
실행 결과는 다음과 같습니다.
+----------+ | DueDate | +----------+ | Jan 2017 | | May 2018 | | Aug 2015 | +----------+ 3 rows in set (0.00 sec)
4. 날짜 형식 변환 쿼리
다음은 'Jan 2017' 형태의 문자열을 'YYYY-MM-DD' 날짜 형식으로 변환하는 쿼리입니다.
mysql> select date_format(str_to_date(DueDate,'%b %Y'), '%Y-%m-01') as Result from DemoTable1985;
실행 결과는 다음과 같습니다.
+------------+ | Result | +------------+ | 2017-01-01 | | 2018-05-01 | | 2015-08-01 | +------------+ 3 rows in set (0.00 sec)
형식 지정자 설명
위 쿼리에서 사용된 주요 형식 지정자는 다음과 같습니다.
- %b: 축약된 월 이름(Jan, May, Aug 등)을 나타냅니다.
- %Y: 4자리 연도(2017, 2018 등)를 나타냅니다.
- %m: 두 자리 숫자 형태의 월(01~12)을 나타냅니다.
STR_TO_DATE()가 'Jan 2017' 같은 문자열을 내부적으로 날짜 값으로 파싱한 뒤, DATE_FORMAT()에서 일(day) 부분을 '01'로 고정하여 해당 월의 첫째 날짜를 반환합니다. 원본 데이터에 일자 정보가 없기 때문에 이렇게 특정 일자를 지정하는 방식이 가장 안전하고 일관된 결과를 제공합니다.