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

MySQL NOW() 기준 1일 전(-1 Day) 레코드 조회하는 방법

MySQL에서 현재 시각(NOW())을 기준으로 1일 전 이후의 레코드를 조회하려면 INTERVAL 키워드를 활용한 날짜 연산을 사용하면 됩니다. 가장 기본적인 문법은 다음과 같습니다.

기본 문법

SELECT * FROM yourTableName
WHERE yourColumnName >= NOW() - INTERVAL 1 DAY;

이 문법은 yourColumnName의 값이 현재 시각에서 1일을 뺀 시점보다 크거나 같은 모든 행을 반환합니다. 실제 동작 방식을 이해하기 위해 예제 테이블을 만들어 단계별로 살펴보겠습니다.

예제 테이블 생성

먼저 DATETIME 타입의 컬럼을 가진 테이블을 생성합니다.

mysql> CREATE TABLE GetRecordsFromNow
    -> (
    -> YourDateTime DATETIME
    -> );
Query OK, 0 rows affected (1.76 sec)

테스트 데이터 삽입

다음으로 DATE_ADD() 함수를 사용해 현재 시각을 기준으로 다양한 날짜의 데이터를 삽입합니다.

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL 3 DAY));
Query OK, 1 row affected (0.28 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -1 DAY));
Query OK, 1 row affected (0.11 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -2 DAY));
Query OK, 1 row affected (0.14 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -3 DAY));
Query OK, 1 row affected (0.09 sec)

mysql> INSERT INTO GetRecordsFromNow VALUES(DATE_ADD(NOW(), INTERVAL -1 DAY));
Query OK, 1 row affected (0.08 sec)

전체 레코드 확인

SELECT 문으로 저장된 모든 데이터를 조회해 보겠습니다.

mysql> SELECT * FROM GetRecordsFromNow;

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

+---------------------+
| YourDateTime        |
+---------------------+
| 2018-12-07 22:30:18 |
| 2018-12-03 22:30:31 |
| 2018-12-02 22:30:41 |
| 2018-12-01 22:30:56 |
| 2018-12-03 22:31:04 |
+---------------------+
5 rows in set (0.00 sec)

NOW() - 1일 조건으로 레코드 조회

이제 현재 시각에서 1일 전 이후의 레코드만 필터링하는 쿼리를 실행합니다.

mysql> SELECT * FROM GetRecordsFromNow
    -> WHERE YourDateTime >= NOW() - INTERVAL 1 DAY;

결과를 보면 미래 날짜인 2018-12-07 데이터 하나만 조건에 해당하여 반환됩니다.

+---------------------+
| YourDateTime        |
+---------------------+
| 2018-12-07 22:30:18 |
+---------------------+
1 row in set (0.04 sec)

참고: 대체 문법과 활용 팁

NOW() - INTERVAL 1 DAY와 동일한 결과를 내는 함수형 표현도 있습니다.

SELECT * FROM GetRecordsFromNow
WHERE YourDateTime >= DATE_SUB(NOW(), INTERVAL 1 DAY);

또한 시간 단위를 자유롭게 변경할 수 있습니다. 예를 들어 최근 1시간 이내의 데이터가 필요하다면 INTERVAL 1 HOUR, 최근 7일이라면 INTERVAL 7 DAY로 바꿔 사용하면 됩니다.

성능 측면에서는 조회 대상 컬럼에 인덱스를 생성해 두는 것이 좋습니다. 인덱스가 있으면 범위 조건 검색 시 전체 테이블 스캔 없이 빠르게 결과를 가져올 수 있습니다.