일반적으로 날짜에 대해 DATETIME으로 저장을 하고,
작동하는 시간 기점으로 저장하기 위해 default 값으로 CURRENT_TIMESTAMP를 설정할 것이다.
DATETIME: YYYY-MM-DD hh:mm:ss
DATE: YYYY-MM-DD
판매 시간을 보여준다거나 게시글의 상세 시간이 아니고는 굳이 시간까지 노출시키지 않아도 되는 경우가 많다!
이럴 때는 DATE 형식으로 설정해주면 되지만,
만약 관리자 페이지의 경우 상세히 하고 싶어서 DATE_FORMAT으로 시간까지 추가할 경우...
기존 데이터에 시간은 없었기에 0으로만 채워지게 된다!😭😂
따라서, DATETIME을 사용하되 필요에 따라 형태를 변환할 수 있는 DATE_FORMAT에 대해 정리하려고 한다🤔
%M : Month 월(January, February ...)%m : Month 월(01, 02, 03 ...)%W : Day of Week 요일(Sunday, Monday ...)%D : Day of Month 일(1st, 2dn, 3rd ...)%Y : Year 연도(1999, 2000, 2020)%y : Year 연도(99, 00, 20)%X : 주간 기준의 연도, 네 자릿수(예: 1999, 2000, 2020), %V와 같이 사용, 주 시작일은 일요일%x : 주간 기준의 연도, 네 자릿수(예: 1999, 2000, 2020), %V와 같이 사용, 주 시작일은 월요일%a : Day of Week요일(Sun, Mon, Tue ...)%d : Day 일(00, 01, 02 ...)%e : Day 일(0, 1, 2 ..)%c : Month(1, 2, 3 ..)%b : Abbreviated Month 축약된 월 이름(Jan, Feb, ...)%j : Year day 연도 기준 몇 번째 날(001 ~ 366)%H : Hour 시(00, 01, 24) 24시간 형태%h : Hour 시(01, 02, 12) 12시간 형태%I : Hour 시(01, 02 12) 12시간 형태%l (소문자 엘) : Hour 시(1, 2, 12) 12 시간 형태%i : Minute 분(00, 01 59)%r : Time 12시간 형식(hh:mm:ss AM/PM)%T : Time 24시간 형식(hh:mm:ss)%S, %s : Second 초%p : AP, PM%w : Day of Week 요일 (0 ~ 6, 0은 일요일)%U : Week 주(시작: 일요일)%u : Week 주(시작: 월요일)%V : ISO 주 번호, 주 시작은 일요일%v : ISO 주 번호, 주 시작은 월요일
SELECT date_format(now(), "%Y-%m-%d") FROM dual;
SELECT
target_date,
DATE_FORMAT(target_date, '%x') AS iso_week_year_monday_start,
DATE_FORMAT(target_date, '%X') AS week_year_sunday_start,
DATE_FORMAT(sample_date, '%v') AS iso_week_monday_start,
DATE_FORMAT(sample_date, '%V') AS week_sunday_start
FROM dual;