Computer >> 컴퓨터 >  >> 프로그래밍 >> MySQL

MySQL에서 최근 며칠 날짜 조회하기 — DATE_ADD()와 DATE_SUB() 완벽 정리

MySQL에서 현재 날짜를 기준으로 최근 며칠 전의 날짜를 구하고 싶을 때가 자주 있습니다. 예를 들어 '오늘로부터 6일 전'의 날짜가 필요하다면 DATE_ADD() 함수나 DATE_SUB() 함수를 사용하면 간단하게 해결할 수 있습니다.

기본 문법

1. DATE_ADD() 함수 사용

SELECT DATE_ADD(CURDATE(), INTERVAL -원하는일수 DAY);

2. DATE_SUB() 함수 사용

SELECT DATE_SUB(CURDATE(), INTERVAL 원하는일수 DAY);

3. 마이너스(-) 연산자 사용

SELECT CURDATE() - INTERVAL 원하는일수 DAY;

세 가지 방법 모두 동일한 결과를 반환합니다. 상황과 취향에 맞게 선택해서 사용하시면 됩니다.

실제 예제

아래는 오늘 날짜(2018-11-26 기준)로부터 6일 전인 2018-11-20을 조회하는 세 가지 방법입니다.

Case 1 — DATE_ADD() 함수 사용

음수 간격을 지정하여 과거 날짜를 구합니다.

mysql> SELECT DATE_ADD(CURDATE(), INTERVAL -6 DAY);

실행 결과:

+-------------------------------------+
| date_add(curdate(),interval -6 day) |
+-------------------------------------+
| 2018-11-20                          |
+-------------------------------------+
1 row in set (0.00 sec)

Case 2 — DATE_SUB() 함수 사용

양수 간격을 빼는 방식으로 과거 날짜를 구합니다.

mysql> SELECT DATE_SUB(CURDATE(), INTERVAL 6 DAY);

실행 결과:

+------------------------------------+
| date_sub(curdate(),interval 6 day) |
+------------------------------------+
| 2018-11-20                         |
+------------------------------------+
1 row in set (0.00 sec)

Case 3 — 마이너스(-) 기호 사용

함수 없이 간결하게 작성할 수 있는 방법입니다.

mysql> SELECT CURDATE() - INTERVAL 6 DAY;

실행 결과:

+--------------------------+
| curdate()-interval 6 day |
+--------------------------+
| 2018-11-20               |
+--------------------------+
1 row in set (0.00 sec)

응용: 실무에서 자주 쓰이는 패턴

실제 업무에서는 특정 테이블에서 최근 N일간의 데이터를 조회하는 경우가 많습니다. 이때는 위 문법을 WHERE 절에 조합하면 됩니다.

-- 최근 7일간 주문 데이터 조회
SELECT *
FROM orders
WHERE order_date >= CURDATE() - INTERVAL 7 DAY;

또는 NOW()를 사용해 시간까지 포함한 기준으로 조회할 수도 있습니다.

-- 최근 24시간 이내 데이터 조회
SELECT *
FROM logs
WHERE created_at >= NOW() - INTERVAL 1 DAY;

정리

  • DATE_ADD(CURDATE(), INTERVAL -N DAY) : 음수 간격으로 과거 날짜 계산
  • DATE_SUB(CURDATE(), INTERVAL N DAY) : 양수 간격을 빼서 과거 날짜 계산
  • CURDATE() - INTERVAL N DAY : 연산자만으로 간결하게 계산

세 가지 방법은 모두 같은 결과를 내므로, 코드 가독성과 팀 컨벤션에 맞는 방식을 선택하시면 됩니다. 시간 단위(HOUR), 월 단위(MONTH) 등 다른 INTERVAL 값도 동일한 방식으로 활용할 수 있습니다.