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

MySQL로 현재 날짜와 전날 데이터 조회하는 방법 완벽 가이드

MySQL에서 현재 날짜는 CURDATE() 함수로, 전날은 DATE_SUB() 함수에 INTERVAL 1 DAY를 조합하여 손쉽게 구할 수 있습니다. 이 두 함수를 활용하면 오늘과 어제의 데이터를 한 번의 쿼리로 조회할 수 있습니다.

기본 문법

먼저 현재 날짜에서 하루 전 날짜를 구하는 기본 쿼리는 다음과 같습니다.

SELECT DATE_SUB(CURDATE(), INTERVAL 1 DAY);

테이블에서 현재 날짜 또는 전날에 해당하는 레코드를 조회하려면 아래와 같이 WHERE 절에 OR 조건을 사용합니다.

SELECT * FROM yourTableName
WHERE yourColumnName = CURDATE()
   OR yourColumnName = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

예제 테이블 생성하기

실제 동작을 확인하기 위해 예제 테이블을 만들어 보겠습니다. 아래 쿼리로 상품 정보를 저장할 테이블을 생성합니다.

mysql> CREATE TABLE ProductDemo
    -> (
    -> Id int NOT NULL AUTO_INCREMENT,
    -> ProductName varchar(20),
    -> ProductOfferDate datetime,
    -> PRIMARY KEY(Id)
    -> );
Query OK, 0 rows affected (0.54 sec)

샘플 데이터 삽입

INSERT 명령어를 사용해 상품명과 상품 등록일(오퍼 날짜) 데이터를 입력합니다.

mysql> INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-11', '2017-05-21');
Query OK, 1 row affected (0.25 sec)

mysql> INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-22', '2019-01-15');
Query OK, 1 row affected (0.16 sec)

mysql> INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-21', '2019-01-14');
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-91', '2018-10-23');
Query OK, 1 row affected (0.26 sec)

mysql> INSERT INTO ProductDemo(ProductName, ProductOfferDate) VALUES('Product-133', '2019-01-24');
Query OK, 1 row affected (0.13 sec)

SELECT 문으로 테이블의 모든 레코드를 확인합니다.

mysql> SELECT * FROM ProductDemo;

실행 결과는 다음과 같습니다.

+----+-------------+---------------------+
| Id | ProductName | ProductOfferDate    |
+----+-------------+---------------------+
| 1  | Product-11  | 2017-05-21 00:00:00 |
| 2  | Product-22  | 2019-01-15 00:00:00 |
| 3  | Product-21  | 2019-01-14 00:00:00 |
| 4  | Product-91  | 2018-10-23 00:00:00 |
| 5  | Product-133 | 2019-01-24 00:00:00 |
+----+-------------+---------------------+
5 rows in set (0.00 sec)

현재 날짜와 전날 데이터 조회 쿼리

이제 CURDATE()와 DATE_SUB()를 활용하여 현재 날짜 또는 전날에 해당하는 상품만 조회해 보겠습니다.

mysql> SELECT * FROM ProductDemo
    -> WHERE ProductOfferDate = CURDATE()
    ->    OR ProductOfferDate = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

실행 결과, 현재 날짜(2019-01-15)와 전날(2019-01-14)에 해당하는 두 개의 레코드가 반환됩니다.

+----+-------------+---------------------+
| Id | ProductName | ProductOfferDate    |
+----+-------------+---------------------+
| 2  | Product-22  | 2019-01-15 00:00:00 |
| 3  | Product-21  | 2019-01-14 00:00:00 |
+----+-------------+---------------------+
2 rows in set (0.00 sec)

추가 팁: DATETIME 컬럼 주의사항

컬럼 타입이 DATETIME인 경우 시간 정보까지 저장되므로, 위 예제처럼 날짜만 비교하려면 DATE() 함수를 사용하는 것이 안전합니다.

SELECT * FROM ProductDemo
WHERE DATE(ProductOfferDate) = CURDATE()
   OR DATE(ProductOfferDate) = DATE_SUB(CURDATE(), INTERVAL 1 DAY);

또한 대량의 데이터를 다룰 때는 인덱스 활용을 위해 BETWEEN 범위 조건을 사용하는 것이 성능 면에서 더 유리할 수 있습니다.