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

MySQL에서 날짜 목록 중 현재 날짜와 일치하는 데이터 조회하기

MySQL에서 datetime 타입의 컬럼에 저장된 여러 날짜 값 중에서 오늘(현재 날짜)과 일치하는 레코드만 조회해야 하는 경우가 자주 있습니다. 이때는 DATE() 함수와 CURDATE() 함수를 함께 사용하면 간단하게 해결할 수 있습니다.

예제 시나리오

현재 날짜가 다음과 같다고 가정해 보겠습니다.

2019-07-22

1. 테이블 생성

먼저 배송 날짜를 저장할 테이블을 생성합니다.

mysql> create table DemoTable705 (ShippingDate datetime);
Query OK, 0 rows affected (0.67 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용해 몇 개의 레코드를 입력합니다.

mysql> insert into DemoTable705 values('2019-01-21 23:59:00');
Query OK, 1 row affected (0.17 sec)
mysql> insert into DemoTable705 values('2019-07-22 00:00:30');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable705 values('2019-07-21 12:01:30');
Query OK, 1 row affected (0.44 sec)

3. 전체 데이터 확인

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

mysql> select *from DemoTable705;

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

+---------------------+
| ShippingDate        |
+---------------------+
| 2019-01-21 23:59:00 |
| 2019-07-22 00:00:30 |
| 2019-07-21 12:01:30 |
+---------------------+
3 rows in set (0.00 sec)

4. 현재 날짜와 일치하는 레코드 조회 쿼리

날짜 목록에서 현재 날짜에 해당하는 레코드를 가져오는 쿼리는 다음과 같습니다.

mysql> select *from DemoTable705 where date(ShippingDate)=CURDATE();

실행 결과:

+---------------------+
| ShippingDate        |
+---------------------+
| 2019-07-22 00:00:30 |
+---------------------+
1 row in set (0.00 sec)

쿼리 동작 원리

DATE() 함수는 datetime 값에서 시간 정보를 제거하고 날짜 부분(YYYY-MM-DD)만 반환합니다. 반면 CURDATE() 함수는 현재 시스템 기준의 오늘 날짜를 반환합니다. 따라서 두 값을 비교하면 시간과 무관하게 날짜가 오늘인 모든 레코드를 정확하게 필터링할 수 있습니다.

참고: 만약 WHERE ShippingDate = NOW()처럼 비교하면 초 단위까지 일치해야 하므로 원하는 결과를 얻기 어렵습니다. 날짜 단위로 비교할 때는 반드시 DATE() 함수를 사용하는 것이 좋습니다.