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

MySQL에서 조건에 맞는 열을 선택해 오늘 날짜와 내일 날짜의 레코드 가져오기

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 타입을 활용하는 것이 좋습니다.