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

MySQL 쿼리로 오늘 날짜 00:00부터 현재 시각까지의 레코드 조회하기

MySQL에서 특정 날짜의 자정(00:00:00)부터 현재 시각까지의 데이터를 조회해야 하는 경우가 자주 있습니다. 예를 들어 현재 시간이 2019-09-14 08:50:10이라면, 이때 우리가 원하는 결과는 2019-09-14 00:00:00부터 2019-09-14 08:50:10 사이에 해당하는 레코드입니다.

실제 예제를 통해 확인해 보겠습니다. 먼저 테이블을 생성합니다.

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

샘플 데이터 삽입

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

mysql> insert into DemoTable values('2019-09-14');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable values('2019-09-14 8:00:10');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable values('2019-09-14 8:44:00');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable values('2019-09-14 12:10:00');
Query OK, 1 row affected (0.12 sec)

전체 레코드 확인

SELECT 문으로 테이블의 모든 레코드를 조회합니다.

mysql> select *from DemoTable;

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-09-14 00:00:00 |
| 2019-09-14 08:00:10 |
| 2019-09-14 08:44:00 |
| 2019-09-14 12:10:00 |
+---------------------+
4 rows in set (0.00 sec)

오늘 00:00부터 현재 시각까지 조회하는 쿼리

핵심은 DATE(NOW())NOW() 함수를 함께 활용하는 것입니다. DATE(NOW())는 오늘 날짜의 자정(00:00:00)을 의미하고, NOW()는 현재 시각을 반환합니다. 이 두 값을 기준으로 BETWEEN 조건처럼 범위를 지정하면 됩니다.

mysql> select *from DemoTable where DueDate > DATE(NOW()) and DueDate < NOW();

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

+---------------------+
| DueDate             |
+---------------------+
| 2019-09-14 08:00:10 |
| 2019-09-14 08:44:00 |
+---------------------+
2 rows in set (0.00 sec)

결과 분석

출력 결과를 보면 조건에 맞는 두 개의 레코드만 반환된 것을 확인할 수 있습니다.

  • 2019-09-14 00:00:00 — 자정 시각은 DueDate > DATE(NOW()) 조건에서 제외됩니다. 자정을 포함하려면 비교 연산자를 >=로 변경하면 됩니다.
  • 2019-09-14 12:10:00 — 현재 시각(08:50:10)보다 미래의 시간이므로 DueDate < NOW() 조건에서 제외됩니다.

이처럼 DATE(NOW())NOW()를 조합하면 별도의 변수나 복잡한 함수 없이도 간단하게 '오늘 00시부터 지금까지'의 데이터를 손쉽게 필터링할 수 있습니다. 일별 통계 집계나 실시간 대시보드를 구현할 때 매우 유용하게 활용되는 패턴입니다.