본문 바로가기

개발

STR_TO_DATE() 활용

날짜형식의 문자열을 비교할 때, STR_TO_DATE(str, formmat) 함수가 꽤나 유용하다.


날짜를 나타내는 값이 거의 일정한 포맷 가지고 있다면, 해당 포맷에 따라 문자열을 datetime 값으로 변환한다.


예를 들어,

2016.4.7

2016.11.22

2016.05.09

16.2.1

처럼 비슷하지만, 조금 껄끄러운 형태도 인식한다.

STR_TO_DATE(column_name, '%Y.%m.%d')

포맷은 날짜 문자열이 가지는 특성을 따라주기만 하면 된다.


이렇게 함수를 적용하여 얻은 datetime 값으로 정렬, 날짜 연산 등에 사용할 수 있다.



등록일자 문자열값에서 최근 1주일간 등록한 내역을 등록일자 역순으로 정렬하여 가져온다.


SELECT column_names

FROM table_name

WHERE STR_TO_DATE(reg_date, '%Y-%m-%d') > DATE_ADD(NOW(), 'INTERVAL -1 WEEK')

ORDER BY STR_TO_DATE(reg_date, '%Y-%m-%d') DESC 


이처럼 굳이 STR_TO_DATE(str, format) 함수를 사용하는 이유는, reg_date 값이 

2016-4-3, 2016-07-08 처럼 섞여있을 때 단순 정렬하면 문자열로 인식하여 처리하므로 7월이 4월 앞에 오기(07 < 4) 때문이다.



외부 자료를 가져올 때 날짜가 문자열 형태면 컬럼 타입을 varchar로 하여 값을 가져온다. 컬럼 타입을 date나 datetime로 하고 자료를 읽었을 때, 다행히 날짜 문자열을 MySQL이 날짜로 인식할 수 있으면 날짜가 들어가지만, 인식할 수 없으면 전혀 엉뚱한 값(1970-01-01, 0000-00-00)이 들어가므로 데이타를 사용할 수 없기 때문이다.



MySQL 의 Date and Time Functions 에서 내용을 찾아볼 수 있다.



반응형