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

MySQL에서 현재 날짜(CURDATE) 기준으로 쿼리 결과 필터링하는 방법

MySQL에서 DATETIME 타입의 컬럼을 현재 날짜와 특정 시간 범위를 기준으로 필터링하는 방법을 알아보겠습니다. 이 작업에는 CURDATE(), DATE(), TIME() 함수를 활용합니다.

1. 테이블 생성하기

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

mysql> create table DemoTable(DueDate datetime);
Query OK, 0 rows affected (0.94 sec)

2. 샘플 데이터 삽입하기

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

mysql> insert into DemoTable values('2019-07-10 04:20:00');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-07-10 05:10:40');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('2019-07-10 09:00:20');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-07-10 10:01:04');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable values('2019-07-10 12:11:10');
Query OK, 1 row affected (0.19 sec)

3. 전체 레코드 조회하기

SELECT 문을 사용해 테이블의 모든 레코드를 확인합니다.

mysql> select *from DemoTable;

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-07-10 04:20:00 |
| 2019-07-10 05:10:40 |
| 2019-07-10 09:00:20 |
| 2019-07-10 10:01:04 |
| 2019-07-10 12:11:10 |
+---------------------+
5 rows in set (0.00 sec)

4. 현재 날짜 기준으로 필터링하기

다음은 현재 날짜(CURDATE())와 일치하면서, 시간이 오전 4시부터 오전 10시 사이인 레코드만 조회하는 쿼리입니다.

mysql> select *from DemoTable where date(DueDate)=curdate()
   and time(DueDate) > '04:00:00'
   and time(DueDate) < '10:00:00';

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-07-10 04:20:00 |
| 2019-07-10 05:10:40 |
| 2019-07-10 09:00:20 |
+---------------------+
3 rows in set (0.00 sec)

핵심 포인트 정리

  • DATE(컬럼명): DATETIME 값에서 날짜 부분만 추출합니다.
  • TIME(컬럼명): DATETIME 값에서 시간 부분만 추출합니다.
  • CURDATE(): 현재 날짜를 반환합니다.

이 세 가지 함수를 조합하면 DATETIME 컬럼을 손쉽게 날짜별·시간대별로 필터링할 수 있습니다. 다만 이 방식은 컬럼에 함수를 적용하기 때문에 인덱스가 있어도 제대로 활용되지 않을 수 있습니다. 대량의 데이터를 다룰 때는 DueDate >= '2024-01-01' AND DueDate < '2024-01-02'처럼 범위 조건으로 비교하는 것이 성능 면에서 더 유리합니다.