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 |
SELECT DATE_FORMAT('2022-10-02', '%Y-%m-%d');
-- 결과: '2022-10-02'
SELECT DATE_FORMAT('2022-10-02 15:30:45', '%Y-%m-%d %H:%i:%s');
-- 결과: '2022-10-02 15:30:45'
SELECT DATE_FORMAT('2022-10-02', '%Y년 %m월 %d일');
-- 결과: '2022년 10월 02일'
DATE_FORMAT()은 출력용 함수 => 결과는 문자열(VARCHAR)
날짜 계산에는 다시 'STR_TO_DATE()' 등으로 되돌려야 함
WHERE DATE_FORMAT(created_date, '%Y-%m') = '2022-10'
WHERE created_date >= '2022-10-01' AND created_date < '2022-11-01'
STR_TO_DATE('문자열', '포맷')
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
| event | event_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() | 날짜를 사람이 읽을 문자열로 포맷 |