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

MySQL에서 타임스탬프 값 기준으로 오늘·어제 2일치 데이터 조회하기

MySQL에서 날짜가 bigint 타입의 Unix 타임스탬프 값으로 저장되어 있을 때, 오늘과 어제에 해당하는 최근 2일치 데이터만 조회해야 하는 경우가 자주 있습니다. 이 글에서는 CURDATE() 함수와 UNIX_TIMESTAMP() 함수를 조합하여 손쉽게 구현하는 방법을 예제와 함께 살펴보겠습니다.

1. 샘플 테이블 생성

먼저 배송 날짜(ShippingDate)를 bigint 타입으로 저장하는 테이블을 생성합니다.

mysql> create table DemoTable1495
-> (
-> ShippingDate bigint
-> );
Query OK, 0 rows affected (0.63 sec)

2. 테스트 데이터 삽입

INSERT 명령어를 사용하여 몇 개의 타임스탬프 레코드를 삽입합니다.

mysql> insert into DemoTable1495 values(1570127400);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1495 values(1570213800);
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1495 values(1570645800);
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable1495 values(1570300200);
Query OK, 1 row affected (0.15 sec)

3. 전체 데이터 확인

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

mysql> select * from DemoTable1495;

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

+--------------+
| ShippingDate |
+--------------+
|  1570127400 |
|  1570213800 |
|  1570645800 |
|  1570300200 |
+--------------+
4 rows in set (0.00 sec)

4. 현재 날짜 확인

기준이 되는 현재 날짜를 먼저 확인합니다.

mysql> select curdate();
+------------+
| curdate()  |
+------------+
| 2019-10-06 |
+------------+
1 row in set (0.00 sec)

5. 오늘·어제 2일치 데이터 조회 쿼리

핵심은 UNIX_TIMESTAMP(CURDATE() - INTERVAL 1 DAY)로 어제 날짜의 시작 시점(자정)을 구하고, UNIX_TIMESTAMP(CURDATE() + INTERVAL 1 DAY)로 내일 자정 직전까지의 범위를 지정하는 것입니다. 이렇게 하면 어제 00:00:00부터 오늘 23:59:59까지의 모든 데이터를 정확하게 필터링할 수 있습니다.

mysql> select * from DemoTable1495
-> where ShippingDate >= unix_timestamp(curdate() - interval 1 day)
-> and
-> ShippingDate < unix_timestamp(curdate() + interval 1 day);

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

+--------------+
| ShippingDate |
+--------------+
|  1570213800 |
|  1570300200 |
+--------------+
2 rows in set (0.00 sec)

정리

타임스탬프 컬럼이 bigint로 저장되어 있더라도 CURDATE()INTERVAL 연산을 적용한 뒤 UNIX_TIMESTAMP()로 변환하면, 별도의 데이터 타입 변경 없이도 특정 기간(예: 오늘과 어제 2일)의 데이터를 간단하고 효율적으로 조회할 수 있습니다. 이 방식은 범위 조건(>=, <)을 사용하기 때문에 인덱스 활용에도 유리하여 대용량 테이블에서도 좋은 성능을 기대할 수 있습니다.