[MySQL] DATE_FORMAT(), STR_TO_DATE()

켈로그·2025년 6월 10일

SQL

목록 보기
4/20

MySQL에서 기본 제공하는 DATE_FORMAT() 함수에 변환할 날짜와 '-, .' 등의 구분자를 넣어 사용

DATE_FORMAT(date_column, '포맷 문자열')

포맷 기호의미예시 값 (2022-10-02 15:30:45)
%Y연도 (4자리)2022
%y연도 (2자리)22
%m월 (2자리)10
%c월 (숫자)10
%d일 (2자리)02
%e일 (숫자)2
%H시 (24시간제, 2자리)15
%h / %I시 (12시간제)03
%i분 (2자리)30
%s초 (2자리)45
%W요일명 (영어)Sunday
%a요일 약어 (영어)Sun
%p오전/오후 (AM/PM)PM

예제

  1. 날짜만 출력 (YYYY-MM-DD)
SELECT DATE_FORMAT('2022-10-02', '%Y-%m-%d');
-- 결과: '2022-10-02'

  1. 날짜+시간 출력
SELECT DATE_FORMAT('2022-10-02 15:30:45', '%Y-%m-%d %H:%i:%s');
-- 결과: '2022-10-02 15:30:45'

  1. 한글 형식 출력
SELECT DATE_FORMAT('2022-10-02', '%Y년 %m월 %d일');
-- 결과: '2022년 10월 02일'

✅ 주의할 점

DATE_FORMAT()은 출력용 함수 => 결과는 문자열(VARCHAR)

날짜 계산에는 다시 'STR_TO_DATE()' 등으로 되돌려야 함

  • WHERE 조건에 쓸 경우 인덱스를 타지 못할 수도 있으니, 대량 데이터 필터링에는 비추천

  1. 인덱스 안 탐
WHERE DATE_FORMAT(created_date, '%Y-%m') = '2022-10'
  1. 인덱스 탐색 가능 (추천)
WHERE created_date >= '2022-10-01' AND created_date < '2022-11-01'

문자열 → 날짜: STR_TO_DATE()

STR_TO_DATE('문자열', '포맷')

  • 문자열이 실제 날짜 형식이라면, 그걸 MySQL 내부의 DATE 또는 DATETIME 타입으로 변환해줍니다.
주요 포맷 예시
문자열포맷 문자열결과 (타입)
'2022-10-02''%Y-%m-%d'DATE
'2022/10/02 14:30:00''%Y/%m/%d %H:%i:%s'DATETIME
'10-02-2022''%m-%d-%Y'DATE

예제

SELECT STR_TO_DATE('2022-10-02', '%Y-%m-%d') AS converted_date;
-- 결과: 2022-10-02 (DATE 타입)
SELECT STR_TO_DATE('02/10/2022 14:00:00', '%d/%m/%Y %H:%i:%s') AS datetime_val;
-- 결과: 2022-10-02 14:00:00

변환된 날짜 기준으로 정렬하기

예제 테이블: my_schedule

eventevent_date_str
'회의''2024-12-01'
'발표''2024-11-20'
'테스트''2024-12-05'
SELECT event, event_date_str
FROM my_schedule
ORDER BY STR_TO_DATE(event_date_str, '%Y-%m-%d') ASC;

⏳ 결과 (오름차순: 가장 빠른 날짜부터)

발표      2024-11-20
회의      2024-12-01
테스트    2024-12-05

날짜 형식 안 맞는 문자열도 변환 가능할까?

가능하지만 잘못된 포맷은 NULL 반환

SELECT STR_TO_DATE('2024년 12월 5일', '%Y년 %m월 %d일');
-- 결과: 2024-12-05
SELECT STR_TO_DATE('20241205', '%Y-%m-%d');
-- 결과: NULL (형식이 안 맞음)

정리

기능함수명설명
문자열 → 날짜STR_TO_DATE()문자열을 포맷대로 해석하여 DATE 반환
날짜 기준 정렬ORDER BY STR_TO_DATE(...)변환된 날짜로 오름/내림차순 정렬
날짜 출력 포맷DATE_FORMAT()날짜를 사람이 읽을 문자열로 포맷
profile
호랑이기운

0개의 댓글