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

MySQL에서 날짜 조건으로 레코드를 검색하는 방법

MySQL에서 DATETIME 타입의 컬럼에 저장된 데이터를 날짜 기준으로 검색하려면 DATE() 함수를 활용하면 됩니다. 이 함수는 DATETIME 값에서 시간 정보를 제거하고 날짜 부분만 반환하기 때문에, 특정 날짜에 해당하는 레코드를 간단하게 조회할 수 있습니다.

아래 예제를 통해 테이블 생성부터 날짜 조건 검색까지 전체 과정을 살펴보겠습니다.

1. 테이블 생성하기

먼저 승객 정보를 저장할 테이블을 생성합니다.

mysql> create table DemoTable732 (
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   PassengerId int,
   PassengerName varchar(100),
   PassengerAge int,
   PassengerTravelDatetime datetime
);
Query OK, 0 rows affected (0.67 sec)

2. 샘플 데이터 삽입하기

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

mysql> insert into DemoTable732(PassengerId,PassengerName,PassengerAge,PassengerTravelDatetime) values(110,'Chris',25,'2019-07-23 12:45:56');
Query OK, 1 row affected (0.40 sec)
mysql> insert into DemoTable732(PassengerId,PassengerName,PassengerAge,PassengerTravelDatetime) values(120,'Robert',24,'2019-07-21 11:05:00');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable732(PassengerId,PassengerName,PassengerAge,PassengerTravelDatetime) values(120,'Sam',26,'2019-07-21 11:05:00');
Query OK, 1 row affected (0.30 sec)

3. 전체 레코드 조회하기

SELECT 문으로 테이블에 저장된 모든 데이터를 확인해 보겠습니다.

mysql> select *from DemoTable732;

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

+----+-------------+---------------+--------------+-------------------------+
| Id | PassengerId | PassengerName | PassengerAge | PassengerTravelDatetime |
+----+-------------+---------------+--------------+-------------------------+
| 1  | 110         | Chris         | 25           | 2019-07-23 12:45:56     |
| 2  | 120         | Robert        | 24           | 2019-07-21 11:05:00     |
| 3  | 120         | Sam           | 26           | 2019-07-21 11:05:00     |
+----+-------------+---------------+--------------+-------------------------+
3 rows in set (0.00 sec)

4. 날짜 조건으로 레코드 개수 구하기

이제 DATE() 함수를 사용해 특정 날짜(2019-07-21)에 여행한 특정 승객(PassengerId = 120)의 레코드 개수를 조회해 보겠습니다.

mysql> select count(Id) from DemoTable732 where PassengerId=120 and
date(PassengerTravelDatetime)='2019-07-21';

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

+-----------+
| count(Id) |
+-----------+
| 2         |
+-----------+
1 row in set (0.00 sec)

핵심 정리

위 쿼리에서 주목할 점은 date(PassengerTravelDatetime)='2019-07-21' 조건입니다. DATETIME 컬럼에는 '2019-07-21 11:05:00'처럼 시간 정보가 함께 저장되어 있지만, DATE() 함수가 날짜 부분만 추출해 주기 때문에 시간과 무관하게 해당 날짜의 레코드를 정확히 필터링할 수 있습니다.

참고로, 대량의 데이터를 다루는 경우에는 인덱스 활용을 위해 DATE() 함수 대신 범위 조건(>= '2019-07-21' AND < '2019-07-22')을 사용하는 것이 성능 면에서 더 유리할 수 있습니다.