Language(R, Python, SQL)/SQL

[SQL] String 을 Date 형으로 변환

dtstory 2022. 12. 1. 20:00

value가 string 으로 구성되어 있는 데이터를 Date 형으로 처리하고 싶은 경우가 있다.

아래의 그림과 같이, 해당 value는 Month'year 형식으로 되어있는데, 우리가 익히 알고 있는 full date(YYYYMMDD) 로 변경해보고자 한다.

 

 

string 자체를 substr, concat을 이용해 yyyymmdd string 형식으로 만들고, date type으로 포맷팅하는 방법은 아래와 같다.

SELECT AA.string_date, STR_TO_DATE(AA.full_date, '%Y%m%d') AS full_date
FROM (
	SELECT CONCAT(
			'20',
			substr(string_date,5,6),
			case 
				when substr(string_date,1,3) = 'Jan' then '01'
				when substr(string_date,1,3) = 'Feb' then '02'
				when substr(string_date,1,3) = 'Mar' then '03'
				when substr(string_date,1,3) = 'Apr' then '04'
				when substr(string_date,1,3) = 'May' then '05'
				when substr(string_date,1,3) = 'Jun' then '06'
				when substr(string_date,1,3) = 'Jul' then '07'
				when substr(string_date,1,3) = 'Aug' then '08'
				when substr(string_date,1,3) = 'Sep' then '09'
				when substr(string_date,1,3) = 'Oct' then '10'
				when substr(string_date,1,3) = 'Nov' then '11'
				when substr(string_date,1,3) = 'Dec' then '12'
			 END,
			 '01'
			 ) AS full_date,
			 string_date
	FROM my_data
) AS AA

1. 우선, 각 월에 해당하는 앞 3자리(Jan, Feb, Mar ,...) 를 숫자로된 월로 치환을 해준다. - case when 사용

2. 2000년도이기 때문에, '20',  day는 01일로 통일할 것이기 때문에 '01'을 붙여 하나의 string으로 만들어 준다 - concat 사용

3. full_date가 된 문자열을 문자형 타입으로 치환을 해준다. - STR_TO_DATE

 

 

해당 방법은 뭔가 코드 길이도 길고, 효율적인 방법은 아닌 것 같다.

 

 

 

아래의 3줄이면 충분하다.

SELECT string_date, 
       STR_TO_DATE(CONCAT('01 ', string_date), '%d %M\'%y') AS full_date
FROM my_data

1. 우선 concat 함수를 이용해, %d 형식에 맞게 '01' 을 붙여 준다.

2. STR_TO_DATE를 이용해 string이 나열된 순서에 맞게 포맷팅('%d %M\'%y')을 진행한다.

 

728x90