DB

[MySQL] STR_TO_DATE와 CAST를 활용한 문자열 → 날짜 변환

인생아 2025. 7. 23. 15:43
반응형

MySQL에서는 종종 '2025-07-22'처럼 날짜처럼 보이지만 실제로는 문자열(String)로 저장된 데이터를 만나게 된다. 이 데이터를 진짜 날짜로 바꿔야 날짜 비교, 정렬, 필터링이 제대로 동작한다. 이때 가장 많이 쓰는 함수가 STR_TO_DATE()이며, 간단한 경우에는 CAST()로도 처리가 가능하다. 실무에서는 외부 엑셀 업로드, CSV 입력값, API 연동 데이터 처리에서 매우 자주 사용된다.

STR_TO_DATE() 함수란?

STR_TO_DATE() 함수는 문자열을 날짜 또는 시간 형식으로 변환해주는 함수다. 내부적으로 포맷 문자열을 지정해서 원하는 형식으로 정확히 바꿔야 한다.

기본 문법

STR_TO_DATE(string, format)

문자열과 해당 문자열의 포맷을 정확하게 지정해줘야 변환이 성공한다.

예제: 기본 날짜 변환

SELECT STR_TO_DATE('2025-07-22', '%Y-%m-%d');
-- 결과: 2025-07-22 (DATE 형식)

이제 '2025-07-22'는 문자열이 아닌 날짜로 처리되므로 조건 비교, 정렬, 필터링에 문제가 없다

반응형

자주 사용하는 포맷 코드

코드 의미 예시
%Y 4자리 연도 2025
%y 2자리 연도 25
%m 2자리 월 07
%d 2자리 일 22
%H 24시간제 시 13
%i 45
%s 30
%p AM/PM AM, PM

예제: 날짜 + 시간 변환

SELECT STR_TO_DATE('2025-07-22 14:30:00', '%Y-%m-%d %H:%i:%s');
-- 결과: 2025-07-22 14:30:00

이제 DATETIME으로 바뀌었기 때문에 NOW(), CURDATE() 같은 시스템 시간과 직접 비교 가능하다

예제: 사용자 입력값 처리 (엑셀/CSV)

SELECT STR_TO_DATE(user_input, '%d/%m/%Y') AS 표준형_날짜
FROM uploads;

사용자가 22/07/2025처럼 영국식 또는 비표준 포맷으로 입력한 데이터를 표준 DATE 형식으로 바꿔준다

예제: 요일 포함된 포맷 처리

SELECT STR_TO_DATE('Tuesday 2025-07-22', '%W %Y-%m-%d');
-- 결과: 2025-07-22

%W를 활용해 요일 정보가 포함된 문자열도 처리할 수 있다

CAST()로 간단하게 날짜 변환하기

CAST() 함수는 문자열을 명시적으로 다른 데이터 타입으로 바꿔주는 MySQL의 표준 SQL 문법 함수다. 날짜 포맷이 MySQL 내부 기본 포맷일 때만 사용 가능하다

SELECT CAST('2025-07-22' AS DATE);
-- 결과: 2025-07-22

이처럼 간단한 형식이면 STR_TO_DATE() 대신 사용할 수 있다. 하지만 복잡한 포맷에서는 CAST()로 변환이 불가능하다

반응형

실무 예제: 문자열 날짜 비교

SELECT *
FROM events
WHERE STR_TO_DATE(event_date_text, '%Y%m%d') >= CURDATE();

'20250722'처럼 붙어 있는 날짜 문자열을 DATE로 바꿔 오늘 날짜와 비교한다. 이처럼 STR_TO_DATE()는 데이터 클렌징 필수 함수로 활용된다

실무 예제: 시간 비교 필터링

SELECT *
FROM logs
WHERE STR_TO_DATE(log_time_str, '%H:%i:%s') BETWEEN '09:00:00' AND '18:00:00';

로그에서 '14:25:30'과 같은 문자열 시간을 TIME 형식으로 바꾸고, 근무 시간대 필터링에 활용할 수 있다

STR_TO_DATE 사용 시 주의사항

  1. 포맷 문자열이 실제 데이터와 완벽히 일치해야 한다. 한 글자라도 다르면 NULL 반환됨
  2. 변환 실패시 오류 없이 NULL로 처리되므로, 실무에서는 IS NULL 조건으로 실패 데이터 추출 가능
  3. 문자열 데이터가 비정형이면 사전 가공 또는 정규식으로 정리한 후 적용하는 것이 좋다

언제 STR_TO_DATE, 언제 CAST?

조건 추천 함수
포맷이 복잡함 STR_TO_DATE
문자열 형식이 yyyy-mm-dd임 CAST 또는 STR_TO_DATE 모두 가능
날짜+시간 조합 문자열 STR_TO_DATE
엑셀/CSV 외부 입력 처리 STR_TO_DATE

기본 형식이면 CAST도 가능하지만, 실무에서는 거의 항상 STR_TO_DATE가 안정적이다

정리

  • STR_TO_DATE()는 문자열을 날짜 또는 시간으로 변환할 때 사용하는 MySQL 함수다
  • 포맷 문자열을 정확하게 지정해야 정상 변환되며, 형식이 다르면 NULL을 반환한다
  • CAST()는 내부 기본 포맷(YYYY-MM-DD)일 때만 간단하게 쓸 수 있다
  • 외부 데이터 정제, API 파싱, 조건 비교 등에서 STR_TO_DATE는 매우 자주 사용된다

참고 문서

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

 

반응형