DB

[MySQL] SELECT + DATE_FORMAT / NOW() 함수 완벽 정리(날짜포맷, 현재시간)

인생아 2025. 6. 25. 16:00
반응형

MySQL에서 날짜와 시간 데이터를 효과적으로 다루기 위해서는 NOW() 함수와 DATE_FORMAT() 함수의 활용법을 제대로 익혀야 한다. 이 두 함수는 데이터 조회 시 시간 조건을 부여하거나, 사용자에게 보여줄 날짜 포맷을 조절할 때 매우 유용하다.

📌 NOW() 함수란?

NOW() 함수는 현재 날짜와 시간을 DATETIME 형식으로 반환한다. 보통 SELECT, INSERT, UPDATE 쿼리에서 현재 시점 기준의 값을 다룰 때 사용한다.

SELECT NOW();
-- 결과 예시: 2025-06-17 15:22:45

NOW()는 주로 데이터의 생성일, 수정일 기록이나, 최근 데이터를 필터링할 때 사용된다.

반응형

🧩 NOW()를 이용한 조건 쿼리 예제

최근 7일간 등록된 사용자를 조회하는 쿼리는 다음과 같다.

SELECT * 
FROM users 
WHERE created_at >= NOW() - INTERVAL 7 DAY;

특정 테이블에서 오늘 등록된 데이터만 조회하고 싶다면 아래처럼 작성할 수 있다.

SELECT * 
FROM logs 
WHERE DATE(created_at) = CURDATE();

성능을 고려한 날짜 필터링은 이렇게 범위 조건으로 작성하는 게 좋다.

SELECT * 
FROM logs 
WHERE created_at >= CURDATE() 
  AND created_at < CURDATE() + INTERVAL 1 DAY;

📌 DATE_FORMAT() 함수란?

DATE_FORMAT()은 날짜를 지정한 포맷 문자열로 변환하는 함수다.
사용자에게 날짜를 더 보기 좋게 출력하거나, 월별/일별 통계를 생성할 때 유용하다.

SELECT DATE_FORMAT(NOW(), '%Y-%m-%d %H:%i:%s') AS formatted;
-- 결과 예시: 2025-06-17 15:22:45

자주 쓰이는 포맷 옵션은 아래와 같다.

  • %Y : 4자리 연도 (예: 2025)
  • %m : 2자리 월 (예: 06)
  • %d : 2자리 일 (예: 17)
  • %H : 시 (00~23)
  • %i : 분
  • %s : 초
반응형

📊 DATE_FORMAT() 활용 예제

회원 가입일을 한국어 형식으로 표현

SELECT 
  user_id, 
  DATE_FORMAT(created_at, '%Y년 %m월 %d일 %H시 %i분') AS 가입일시 
FROM users;

주문 테이블에서 월별 주문 수를 조회

SELECT 
  DATE_FORMAT(order_date, '%Y-%m') AS 주문월, 
  COUNT(*) AS 주문건수 
FROM orders 
GROUP BY 주문월 
ORDER BY 주문월 DESC;

시간대별 접속 현황을 정리할 때도 DATE_FORMAT()은 필수다.

SELECT 
  DATE_FORMAT(login_time, '%H') AS 접속시각, 
  COUNT(*) AS 접속수 
FROM access_log 
WHERE DATE(login_time) = CURDATE() 
GROUP BY 접속시각 
ORDER BY 접속시각;

📎 NOW() + CASE 조건 분기 활용

특정 조건에 따라 데이터 구분 라벨을 붙이고 싶다면 CASE와 함께 NOW()를 사용할 수 있다.

SELECT 
  user_id, 
  created_at, 
  CASE 
    WHEN created_at >= NOW() - INTERVAL 1 DAY THEN '최근 1일'
    WHEN created_at >= NOW() - INTERVAL 7 DAY THEN '최근 7일'
    ELSE '이전'
  END AS 가입범주
FROM users;

이처럼 NOW()와 DATE_FORMAT()을 적절히 조합하면 실무에서의 데이터 분석과 보고서 작성이 훨씬 효율적이다.

📘 공식 문서 참고 링크

반응형