본문 바로가기
잡식

MySQL에서 문자열을 날짜로 변경하는 방법 정리

by 불멸남생 2025. 5. 14.

MySQL을 활용하다 보면 문자열 형식의 데이터를 날짜 형식으로 변환해야 하는 상황이 자주 발생합니다. 예를 들어, '2025-05-13'과 같은 문자열을 DATE 타입으로 변환하거나, '20250513', '13/05/2025'처럼 다양한 형식의 문자열을 표준 날짜로 변환해야 하는 경우가 존재합니다. 본 문서에서는 이러한 문자열을 MySQL에서 날짜로 변경하는 모든 방법을 상세히 다루며, 실무에서 바로 적용할 수 있도록 예제 중심으로 설명합니다.

MySQL에서 문자열을 날짜로 변경하는 기본 개념

MySQL은 다양한 날짜 및 시간 관련 함수를 제공합니다. 그중 STR_TO_DATE() 함수는 문자열을 날짜로 파싱하는 데 가장 중요한 함수입니다.

이 함수는 문자열과 해당 문자열의 형식을 함께 입력받아, 이를 DATE, DATETIME, TIME 형식으로 변환합니다.

SELECT STR_TO_DATE('2025-05-13', '%Y-%m-%d');

이 쿼리는 2025-05-13이라는 문자열을 MySQL의 DATE 타입으로 변환합니다.

핵심 포인트

  • 문자열의 포맷이 정확히 일치해야 함
  • 변환 후 DATE, DATETIME, TIME 데이터타입으로 활용 가능
반응형

STR_TO_DATE 함수의 사용법

STR_TO_DATE 기본 문법

STR_TO_DATE(문자열, 포맷)

예제 1: YYYY-MM-DD 포맷

SELECT STR_TO_DATE('2025-12-25', '%Y-%m-%d'); -- 결과: 2025-12-25

예제 2: DD/MM/YYYY 포맷

SELECT STR_TO_DATE('25/12/2025', '%d/%m/%Y'); -- 결과: 2025-12-25

예제 3: YYYYMMDD 포맷

SELECT STR_TO_DATE('20251225', '%Y%m%d'); -- 결과: 2025-12-25

자주 사용하는 포맷 코드

포맷 코드 의미 예시 값

%Y 연도(4자리) 2025
%y 연도(2자리) 25
%m 월(2자리) 05
%d 일(2자리) 13
%H 시(00~23) 14
%i 분(00~59) 30
%s 초(00~59) 45
반응형

DATE_FORMAT과의 차이점과 활용법

많은 개발자들이 DATE_FORMAT과 STR_TO_DATE를 혼동합니다.

차이점 요약

  • STR_TO_DATE: 문자열 → 날짜
  • DATE_FORMAT: 날짜 → 문자열

DATE_FORMAT 사용 예제

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d'); -- 결과: '2025-05-13'

함께 활용하는 예제

SELECT DATE_FORMAT(STR_TO_DATE('2025/12/25', '%Y/%m/%d'), '%d-%m-%Y');
-- 결과: '25-12-2025'

날짜로 변경할 수 없는 경우 예외 처리 방법

MySQL은 문자열을 날짜로 변환하는 과정에서 오류가 발생해도 기본적으로 NULL을 반환하며, 에러를 발생시키지 않습니다.

예제: 잘못된 날짜 입력

SELECT STR_TO_DATE('2025-13-01', '%Y-%m-%d'); -- 결과: NULL

IFNULL을 이용한 기본값 처리

SELECT IFNULL(STR_TO_DATE('2025-13-01', '%Y-%m-%d'), '1900-01-01');
-- 결과: 1900-01-01
반응형

실전 예제: 다양한 문자열 날짜 포맷 변환

1. 하이픈 없는 포맷 처리

SELECT STR_TO_DATE('20250513', '%Y%m%d'); -- 결과: 2025-05-13

2. 타임스탬프 포함 문자열

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

3. 월 이름 포함 문자열

SELECT STR_TO_DATE('May 13, 2025', '%M %d, %Y'); -- 결과: 2025-05-13

4. 한국식 날짜 포맷 (예: 2025년 5월 13일)

SELECT STR_TO_DATE('2025년 5월 13일', '%Y년 %m월 %d일'); -- 결과: 2025-05-13

쿼리 성능과 최적화 팁

WHERE 절에서의 사용 주의

다음과 같은 WHERE 조건은 인덱스를 무시합니다.

SELECT * FROM logs 
WHERE STR_TO_DATE(log_date, '%Y-%m-%d') = '2025-05-13';

해결 방법: 가능하면 입력값을 미리 변환해 DATE 컬럼으로 저장

CAST()로 형 변환 제어

SELECT * FROM logs
WHERE CAST(log_date AS DATE) = '2025-05-13';
반응형

마무리 및 추천 링크

MySQL에서 문자열을 날짜로 변환하는 것은 단순한 작업처럼 보이지만, 포맷 지정이 잘못되면 오류 없이도 잘못된 데이터를 처리하게 됩니다. 본문에서 다룬 STR_TO_DATE()의 활용법과 다양한 실전 예제를 바탕으로 실무에 적용해 보시기 바랍니다.

반응형