반응형
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
반응형
'DB' 카테고리의 다른 글
| [MySQL] MD5와 SHA 해시 함수 비교와 실전 활용 (1) | 2025.07.25 |
|---|---|
| [MySQL] PASSWORD와 OLD_PASSWORD 함수 완전 해부 (0) | 2025.07.25 |
| [MySQL] 숫자, 날짜, 문자형 자유 변환 꿀팁 모음 (3) | 2025.07.25 |
| [MySQL] 날짜 → 문자열 변환: DATE_FORMAT 응용하기 🗓️ (2) | 2025.07.25 |
| [MySQL] CONVERT 함수와 CAST 차이점 비교 (0) | 2025.07.25 |
| [MySQL] CAST 함수로 데이터 형 변환하기 (0) | 2025.07.25 |
| [MySQL] CASE WHEN으로 다중 조건 처리하기 (1) | 2025.07.25 |
| [MySQL] NULLIF로 두 값 비교 후 조건 처리하기 (3) | 2025.07.25 |