DB

[MySQL] DATE_FORMAT, TIME_FORMAT 사용법 완전 정복 📅

인생아 2025. 7. 22. 21:10
반응형

날짜와 시간을 사람이 보기 좋게 표현하거나, 원하는 형식으로 가공해야 할 때 가장 많이 사용하는 함수가 바로 DATE_FORMAT()과 TIME_FORMAT()이다. 이 함수들은 MySQL에서 날짜 출력 포맷을 자유자재로 설정할 수 있게 해주며, 리포트나 통계 화면, 이메일 본문 날짜 표현 등에서 굉장히 유용하게 쓰인다

DATE_FORMAT() 함수란?

DATE_FORMAT() 함수는 날짜(DATE, DATETIME, TIMESTAMP) 값을 지정된 형식대로 문자열로 변환해주는 함수이다

기본 문법

DATE_FORMAT(date, format_string)

첫 번째 인자는 날짜 값이고, 두 번째는 포맷 형식 문자열이다. 예를 들어 '%Y-%m-%d', '%H:%i:%s' 등이 있다

주요 포맷 기호 정리

포맷 기호 설명 예시 값
%Y 4자리 연도 2025
%y 2자리 연도 25
%m 2자리 월 07
%c 1자리 월 7
%d 2자리 일 22
%e 1자리 일 5, 22
%H 24시간제 시 14
%h 12시간제 시 02
%i 09
%s 30
%p AM/PM AM, PM
%W 요일 (전체 이름) Tuesday
%a 요일 (짧은 이름) Tue

예제 1: 날짜 포맷 변경

SELECT DATE_FORMAT('2025-07-22 14:25:30', '%Y년 %m월 %d일');
-- 결과: 2025년 07월 22일

예제 2: 시간 포맷만 추출

SELECT DATE_FORMAT('2025-07-22 14:25:30', '%H:%i:%s');
-- 결과: 14:25:30

예제 3: 요일 포함 형식

SELECT DATE_FORMAT('2025-07-22', '%W (%Y-%m-%d)');
-- 결과: Tuesday (2025-07-22)
반응형

TIME_FORMAT() 함수란?

TIME_FORMAT() 함수는 시간 데이터만 포맷팅할 때 사용하며, TIME, DATETIME, TIMESTAMP 타입에서 시간 부분만 추출해 형식화한다

TIME_FORMAT(time, format_string)

주로 %H, %i, %s, %p 같은 포맷 기호를 사용한다

예제: 오후 2시를 12시간제로 표시

SELECT TIME_FORMAT('14:25:30', '%h:%i:%s %p');
-- 결과: 02:25:30 PM

실무 예제: 고객 가입일을 한국형 날짜로 표시

SELECT
  user_name,
  DATE_FORMAT(join_date, '%Y년 %m월 %d일 가입') AS 가입일자
FROM users;

이런 포맷은 리포트나 고객 통지 이메일에 매우 유용하다. 특히 한국어 기반 시스템에서는 년, 월, 일을 직접 포함해 가독성 높은 표현을 만들 수 있다

실무 예제: 시간대별 접속 이력 표현

SELECT
  user_id,
  TIME_FORMAT(login_time, '%h시 %i분 %p') AS 접속시간
FROM login_log;

12시간제와 AM/PM을 조합하면 사용자가 익숙하게 느끼는 포맷을 만들 수 있다

활용 팁

  1. DATE_FORMAT()은 GROUP BY나 ORDER BY와 함께 자주 사용된다. 예를 들어 월별 매출 분석 시 포맷 문자열을 사용해 보기 좋게 표현할 수 있다
  2. 시간대 기준 통계 화면에서는 TIME_FORMAT()으로 시각만 뽑아 가독성을 높인다
  3. 날짜 데이터를 포맷팅하면 **문자열(String)**로 바뀌므로, 정렬이나 비교가 필요한 경우엔 원본 날짜 필드도 함께 사용하는 것이 좋다

쿼리 예제: 월-일 기준으로 주문 건수 보기

SELECT
  DATE_FORMAT(order_date, '%m월 %d일') AS 날짜,
  COUNT(*) AS 주문수
FROM orders
WHERE order_date BETWEEN '2025-07-01' AND '2025-07-31'
GROUP BY 날짜
ORDER BY 날짜;

2025-07-01부터 2025-07-31 사이 주문을 월/일 기준으로 그룹화하여 보기 쉽게 출력하는 실무형 쿼리다

쿼리 예제: 오전/오후 기준 접속자 수

SELECT
  IF(TIME_FORMAT(login_time, '%p') = 'AM', '오전', '오후') AS 접속구간,
  COUNT(*) AS 인원수
FROM login_log
GROUP BY 접속구간;

오전/오후로 나눠서 사용자 행동 패턴을 분석할 때 활용할 수 있다

정리

  • DATE_FORMAT()은 날짜와 시간을 원하는 포맷으로 문자열로 가공한다
  • TIME_FORMAT()은 시간만 포맷팅할 때 유용하다
  • 한국식 날짜 표현도 자유롭게 구성 가능하며, 통계/보고서/화면 표현에서 자주 활용된다
  • 포맷 문자열은 %Y, %m, %d, %H, %i, %s, %p 등 다양한 조합을 지원한다

참고 문서

https://dev.mysql.com/doc/refman/8.0/en/date-and-time-functions.html#function_date-format

 

반응형