MySQL에서 특정 날짜 조건을 만족하는 레코드만 조회하고 싶을 때가 있습니다. 이번 글에서는 현재 날짜(CURDATE())와 현재 날짜 + 1일(내일)에 해당하는 배송일 데이터를 가진 레코드에서 원하는 열만 선택해 가져오는 방법을 단계별로 알아보겠습니다.
1단계: 현재 날짜 확인하기
먼저 CURDATE() 함수로 현재 날짜를 확인해 보겠습니다.
mysql> select curdate();
실행 결과는 다음과 같습니다.
+------------+ | curdate() | +------------+ | 2019-12-15 | +------------+ 1 row in set (0.00 sec)
2단계: 테이블 생성하기
예제에 사용할 테이블을 생성합니다. 상품 ID, 상품명, 고객명, 배송일 컬럼으로 구성된 테이블입니다.
mysql> create table DemoTable1956
(
ProductId int,
ProductName varchar(20),
CustomerName varchar(20),
ShippingDate date
);
Query OK, 0 rows affected (0.00 sec)3단계: 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 여러 개의 레코드를 추가합니다. 배송일은 과거 날짜, 현재 날짜, 내일 날짜 등 다양하게 넣어 조건 조회 결과를 명확히 확인할 수 있도록 했습니다.
mysql> insert into DemoTable1956 values(101,'Product-1','Sam','2019-10-11'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1956 values(102,'Product-2','Carol','2018-12-01'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1956 values(103,'Product-3','David','2019-12-15'); Query OK, 1 row affected (0.00 sec) mysql> insert into DemoTable1956 values(104,'Product-4','Robert','2019-12-16'); Query OK, 1 row affected (0.00 sec)
4단계: 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회해 봅니다.
mysql> select * from DemoTable1956;
실행 결과는 다음과 같습니다.
+-----------+-------------+--------------+--------------+ | ProductId | ProductName | CustomerName | ShippingDate | +-----------+-------------+--------------+--------------+ | 101 | Product-1 | Sam | 2019-10-11 | | 102 | Product-2 | Carol | 2018-12-01 | | 103 | Product-3 | David | 2019-12-15 | | 104 | Product-4 | Robert | 2019-12-16 | +-----------+-------------+--------------+--------------+ 4 rows in set (0.00 sec)
5단계: 오늘과 내일 날짜의 레코드에서 열 선택하기
핵심 쿼리입니다. WHERE 절에서 IN 연산자와 함께 CURDATE()와 CURDATE() + INTERVAL 1 DAY를 사용하면 배송일이 오늘 또는 내일인 레코드만 필터링할 수 있습니다.
mysql> select CustomerName from DemoTable1956 where ShippingDate IN(CURDATE(),CURDATE()+interval 1 Day);
실행 결과는 다음과 같습니다.
+--------------+ | CustomerName | +--------------+ | David | | Robert | +--------------+ 2 rows in set (0.00 sec)
정리
위 결과를 보면 배송일이 2019-12-15(현재 날짜)인 David과 2019-12-16(현재 날짜 + 1일)인 Robert만 조회된 것을 확인할 수 있습니다. 이처럼 CURDATE() 함수와 INTERVAL 표현식을 IN 조건에 함께 사용하면 날짜 범위가 좁은 데이터를 간편하게 추출할 수 있습니다.
참고로 INTERVAL 대신 DATE_ADD(CURDATE(), INTERVAL 1 DAY) 함수를 사용해도 동일한 결과를 얻을 수 있으며, 시간 정보까지 고려해야 한다면 NOW()와 DATETIME 타입을 활용하는 것이 좋습니다.