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

MySQL에서 현재 날짜 기준 지난 이틀간의 레코드 조회하는 방법

MySQL에서 현재 날짜 기준 지난 이틀간의 레코드 조회하기

MySQL에서 현재 날짜를 기준으로 지난 이틀간의 레코드를 조회하려면 DATE_SUB() 함수를 사용하면 됩니다. 아울러 현재 날짜와 시간을 구하는 NOW() 함수도 함께 활용합니다. 기본 문법은 다음과 같습니다.

SELECT *FROM yourTableName
WHERE yourDateTimeColumnName BETWEEN DATE_SUB(DATE(NOW()), INTERVAL 2 DAY)
AND DATE_SUB(DATE(NOW()), INTERVAL 1 DAY);

여기서 BETWEEN 조건은 시작 날짜(2일 전)와 종료 날짜(1일 전) 사이에 해당하는 데이터만 필터링합니다. 그럼 실제 예제를 통해 자세히 살펴보겠습니다.

1. 테이블 생성

먼저 예제에 사용할 테이블을 생성합니다.

mysql> create table get2daysAgoDemo
- > (
- > Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
- > Name varchar(20),
- > PostDateTime datetime
- > );
Query OK, 0 rows affected (1.70 sec)

2. 샘플 데이터 삽입

insert 명령을 사용해 테이블에 여러 개의 레코드를 삽입합니다.

mysql> insert into get2daysAgoDemo(Name,PostDateTime) values('Larry',now());
Query OK, 1 row affected (0.68 sec)
mysql> insert into get2daysAgoDemo(Name,PostDateTime) values('Mike','2019-02-13');
Query OK, 1 row affected (0.12 sec)
mysql> insert into get2daysAgoDemo(Name,PostDateTime) values('Sam','2019-01-31');
Query OK, 1 row affected (0.15 sec)
mysql> insert into get2daysAgoDemo(Name,PostDateTime) values('Bob','2019-02-14');
Query OK, 1 row affected (0.29 sec)
mysql> insert into get2daysAgoDemo(Name,PostDateTime) values('David','2019-02-12');
Query OK, 1 row affected (0.21 sec)
mysql> insert into get2daysAgoDemo(Name,PostDateTime) values('Carol','2019-02-11');
Query OK, 1 row affected (0.22 sec)

3. 전체 레코드 확인

select 문을 사용해 테이블에 저장된 모든 레코드를 확인해 보겠습니다.

mysql> select *from get2daysAgoDemo;

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

+----+-------+---------------------+
| Id | Name | PostDateTime |
+----+-------+---------------------+
| 1 | Larry | 2019-02-15 21:47:10 |
| 2 | Mike | 2019-02-13 00:00:00 |
| 3 | Sam | 2019-01-31 00:00:00 |
| 4 | Bob | 2019-02-14 00:00:00 |
| 5 | David | 2019-02-12 00:00:00 |
| 6 | Carol | 2019-02-11 00:00:00 |
+----+-------+---------------------+
6 rows in set (0.00 sec)

4. 지난 이틀간의 레코드 조회 쿼리 실행

이제 지난 이틀간의 레코드를 조회하는 쿼리를 실행해 보겠습니다. 현재 날짜가 2019년 2월 15일이라고 가정합니다.

mysql> select *from get2daysAgoDemo
- > where PostDateTime between DATE_SUB(DATE(NOW()), INTERVAL 2 DAY)
- > AND DATE_SUB(DATE(NOW()), INTERVAL 1 DAY);

실행 결과, 현재 날짜가 2월 15일이므로 지난 이틀에 해당하는 2월 13일과 14일의 레코드만 출력됩니다.

+----+------+---------------------+
| Id | Name | PostDateTime |
+----+------+---------------------+
| 2 | Mike | 2019-02-13 00:00:00 |
| 4 | Bob | 2019-02-14 00:00:00 |
+----+------+---------------------+
2 rows in set (0.01 sec)

이처럼 DATE_SUB(DATE(NOW()), INTERVAL n DAY) 형태를 응용하면 원하는 기간의 데이터를 손쉽게 조회할 수 있습니다. 예를 들어 INTERVAL 7 DAY로 변경하면 지난 일주일간의 레코드를 가져올 수 있습니다.