테이블 생성하기
먼저 예제에 사용할 테이블을 생성하겠습니다.
mysql> create table DemoTable
-> (
-> Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
-> ShippingDate datetime
-> );
Query OK, 0 rows affected (1.16 sec)
레코드 삽입하기
insert 명령을 사용해 테이블에 배송 날짜 데이터를 몇 개 추가합니다. 이 예제에서는 현재 날짜가 2019-06-28이라고 가정합니다.
mysql> insert into DemoTable(ShippingDate) values('2019-01-31');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-06-06');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-06-28');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(ShippingDate) values('2019-07-01');
Query OK, 1 row affected (0.16 sec)전체 레코드 확인하기
select 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
위 쿼리는 다음과 같은 결과를 반환합니다.
+----+---------------------+
| Id | ShippingDate |
+----+---------------------+
| 1 | 2019-01-31 00:00:00 |
| 2 | 2019-06-06 00:00:00 |
| 3 | 2019-06-28 00:00:00 |
| 4 | 2019-07-01 00:00:00 |
+----+---------------------+
4 rows in set (0.00 sec)
NOW() 함수로 오늘 날짜 레코드 조회하기
datetime 타입 컬럼에는 날짜뿐 아니라 시간 정보까지 함께 저장됩니다. 따라서 NOW() 값과 단순 비교하면 시간까지 완전히 일치해야만 조건을 만족하게 됩니다. 그래서 DATE() 함수로 양쪽 값을 날짜 단위로 변환한 후 비교하는 것이 핵심입니다.
mysql> select *from DemoTable where Date(ShippingDate)=Date(now());
실행 결과는 다음과 같습니다.
+----+---------------------+
| Id | ShippingDate |
+----+---------------------+
| 3 | 2019-06-28 00:00:00 |
+----+---------------------+
1 row in set (0.00 sec)
현재 날짜인 2019-06-28과 일치하는 Id 3번 레코드 하나만 정확하게 조회된 것을 확인할 수 있습니다.
참고: CURDATE() 함수 활용
Date(now()) 대신 CURDATE() 함수를 사용해도 동일한 결과를 얻을 수 있습니다. CURDATE()는 현재 날짜만 'YYYY-MM-DD' 형식으로 반환하므로 코드가 더 간결해집니다.
mysql> select *from DemoTable where Date(ShippingDate) = CURDATE();