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

MySQL 테이블에서 지난 3일 이전에 게시된 행 조회하는 방법

MySQL에서 지난 3일 이전에 게시된 데이터 조회하기

현재 날짜가 '2019-10-20'이라고 가정해 보겠습니다. 이 글에서는 MySQL 테이블을 쿼리하여 지난 3일 이전에 게시된 행을 가져오는 방법을 테이블 생성부터 쿼리 실행까지 단계별로 살펴봅니다.

1단계: 테이블 생성하기

먼저 예제로 사용할 테이블을 만듭니다.

mysql> create table DemoTable1582
    -> (
    -> PostedDate datetime
    -> );
Query OK, 0 rows affected (13.36 sec)

2단계: 샘플 데이터 입력하기

INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable1582 values('2019-01-21 12:34:40');
Query OK, 1 row affected (1.06 sec)

mysql> insert into DemoTable1582 values('2019-10-15 11:00:00');
Query OK, 1 row affected (0.87 sec)

mysql> insert into DemoTable1582 values('2019-10-25 1:10:00');
Query OK, 1 row affected (1.14 sec)

3단계: 전체 데이터 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1582;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+---------------------+
| PostedDate          |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
| 2019-10-25 01:10:00 |
+---------------------+
3 rows in set (0.00 sec)

4단계: 조건에 맞는 행 필터링하기

다음은 지난 3일 이전에 게시된 행을 가져오는 쿼리입니다.

mysql> select * from DemoTable1582
    -> where PostedDate between date_sub(PostedDate, interval 3 day) and now();

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

+---------------------+
| PostedDate          |
+---------------------+
| 2019-01-21 12:34:40 |
| 2019-10-15 11:00:00 |
+---------------------+
2 rows in set (0.20 sec)

기준 날짜가 2019-10-20이므로 이 시점 이전에 게시된 두 개의 행만 반환되었고, 아직 도래하지 않은 미래 날짜인 2019-10-25의 행은 결과에서 제외되었습니다.

더 명확한 대안: NOW() 기준으로 계산하기

DATE_SUB() 함수에 현재 시각을 나타내는 NOW()를 직접 지정하면 기준 시점을 더욱 명확하게 표현할 수 있습니다. 현재 시각을 기준으로 3일보다 오래된, 즉 지난 3일 이전에 게시된 데이터만 조회하려면 다음과 같이 작성합니다.

mysql> select * from DemoTable1582
    -> where PostedDate < date_sub(now(), interval 3 day);

반대로 최근 3일 이내에 게시된 데이터를 조회하고 싶다면 BETWEEN 절을 활용하면 됩니다.

mysql> select * from DemoTable1582
    -> where PostedDate between date_sub(now(), interval 3 day) and now();

마무리

MySQL에서는 DATE_SUB()NOW(), BETWEEN 절을 조합하면 게시일(datetime) 컬럼을 기준으로 간편하게 기간 필터링을 수행할 수 있습니다. 참고로 해당 컬럼에 인덱스를 미리 생성해 두면 대용량 테이블에서도 빠른 조회 성능을 유지할 수 있습니다.