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()의 활용법과 다양한 실전 예제를 바탕으로 실무에 적용해 보시기 바랍니다.
'잡식' 카테고리의 다른 글
초여름 쿨링패드 선택과 활용법 (1) | 2025.05.14 |
---|---|
친환경 세제 지속 가능한 삶을 위한 똑똑한 선택 (1) | 2025.05.14 |
프렌즈 시즌6 6편 한국인이 모를 수 있는 미국 문화와 주요 영어 문구 해설 (0) | 2025.05.14 |
프렌즈 시즌6 7편 한국인이 잘 모르는 문화와 주요 영어 문구 해설 (0) | 2025.05.14 |
프렌즈 시즌6 16편 한국인이 모를 수 있는 미국 문화와 주요 영어 표현 해설 (0) | 2025.05.14 |