반응형
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()을 적절히 조합하면 실무에서의 데이터 분석과 보고서 작성이 훨씬 효율적이다.
📘 공식 문서 참고 링크
반응형
'DB' 카테고리의 다른 글
| [MySQL] IS NULL과 IS NOT NULL 완전 정복! 조건절로 놓치지 말아야 할 핵심 포인트 (2) | 2025.06.26 |
|---|---|
| [MySQL] SELECT 문에서 EXISTS와 IN 조건절 (1) | 2025.06.26 |
| [MySQL] SELECT + 서브쿼리 활용법 (쿼리 안에 쿼리) (0) | 2025.06.26 |
| [MySQL] SELECT JOIN 완벽 정리 – INNER JOIN, LEFT JOIN, RIGHT JOIN 차이와 실전 예제 (0) | 2025.06.25 |
| [MySQL] SELECT CASE / IF 조건 분기 (쿼리 조건문 활용) (0) | 2025.06.25 |
| [MySQL] SELECT + COUNT, SUM, AVG, MAX, MIN 집계 함수 완전 정복 (0) | 2025.06.25 |
| [MySQL] SELECT DISTINCT – 중복된 데이터 없이 깔끔하게 조회하는 법 (0) | 2025.06.25 |
| [MySQL] SELECT LIMIT / OFFSET (행의 개수 제한 / 페이징 처리) (0) | 2025.06.24 |