DB

[MySQL] 문자열 → 날짜 변환: STR_TO_DATE 실전 예제 📆

인생아 2025. 7. 25. 13:33
반응형

MySQL에서 날짜 데이터를 처리할 때 가장 자주 마주치는 이슈 중 하나는 문자열로 저장된 날짜를 DATE 타입으로 변환하는 문제다. 예를 들어 '2025-07-23', '20250723', '07/23/2025'처럼 포맷이 다양한 문자열을 날짜로 바꿔야 할 때가 많다.

이럴 때 사용하는 함수가 바로 STR_TO_DATE()다. STR_TO_DATE는 문자열을 지정한 날짜 포맷으로 해석하여 DATE, DATETIME 등의 형식으로 변환해준다.

STR_TO_DATE 문법

STR_TO_DATE(문자열, 포맷문자열)
  • 첫 번째 인자: 날짜로 변환할 문자열
  • 두 번째 인자: 문자열의 포맷을 나타내는 포맷 코드

자주 사용하는 포맷 코드

코드 설명 예시 값
%Y 4자리 연도 2025
%y 2자리 연도 25
%m 월 (01~12) 07
%d 일 (01~31) 23
%H 시 (00~23) 14
%i 분 (00~59) 35
%s 초 (00~59) 27
%b 약식 월 이름 Jul
%M 전체 월 이름 July

자세한 포맷은 공식 문서를 참고하면 된다.

반응형

예제 1: '20250723' → 날짜로 변환

SELECT STR_TO_DATE('20250723', '%Y%m%d') AS 변환날짜;
-- 결과: 2025-07-23

예제 2: '07/23/2025' → 날짜로 변환

SELECT STR_TO_DATE('07/23/2025', '%m/%d/%Y') AS 변환날짜;
-- 결과: 2025-07-23

예제 3: 시간까지 포함된 문자열 처리

SELECT STR_TO_DATE('2025-07-23 14:35:27', '%Y-%m-%d %H:%i:%s') AS 날짜시간;
-- 결과: 2025-07-23 14:35:27

예제 4: 월 이름으로 표현된 날짜

SELECT STR_TO_DATE('Jul 23, 2025', '%b %d, %Y') AS 날짜;
-- 결과: 2025-07-23

예제 5: 잘못된 포맷 → NULL 반환

SELECT STR_TO_DATE('23-07-2025', '%Y/%m/%d') AS 실패예시;
-- 결과: NULL

날짜 문자열과 포맷이 일치하지 않으면 NULL이 반환되므로 항상 포맷을 정확히 지정해야 한다.

반응형

실무 팁

  • 다양한 시스템에서 가져온 CSV 데이터, 로그 파일, 사용자 입력 등을 처리할 때 필수
  • 쿼리에서 직접 변환하거나, ETL 처리 시 사용
  • 날짜로 변환 후 정렬, 비교, 연산 가능
SELECT *
FROM access_log
WHERE STR_TO_DATE(log_time_str, '%Y%m%d%H%i%S') BETWEEN '2025-07-01' AND '2025-07-31';

CAST와의 차이점

CAST()는 '2025-07-23'처럼 MySQL이 인식 가능한 표준 날짜 포맷만 변환할 수 있다.
STR_TO_DATE는 비표준 포맷도 명시적으로 변환 가능하기 때문에 훨씬 유연하다.

정리

  • STR_TO_DATE()는 비표준 문자열을 날짜 타입으로 바꾸는 가장 강력한 방법이다.
  • 포맷 코드를 정확히 지정해야 하며, 잘못 지정하면 NULL이 반환된다.
  • 실무에서 CSV, Excel, 사용자 입력 데이터 처리 시 필수로 활용된다.

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_str-to-date

 

반응형