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

MySQL에서 특정 날짜의 레코드를 조회하는 쿼리 작성법

MySQL DATE() 함수로 특정 날짜 데이터 조회하기

MySQL에서는 DATE() 함수를 사용하면 datetime 타입 컬럼에서 특정 날짜에 해당하는 레코드를 간단하게 조회할 수 있습니다. 기본 문법은 다음과 같습니다.

SELECT * FROM yourTableName WHERE DATE(yourDateColumnName) = 'anyDate';

DATE() 함수는 datetime 값에서 날짜 부분만 추출해 주기 때문에, 시간 정보가 포함된 컬럼이라도 원하는 날짜와 정확히 일치하는 레코드를 찾을 수 있습니다.

예제 테이블 생성하기

먼저 실습용 테이블을 생성해 보겠습니다.

mysql> create table AllRecordsFromadate
-> (
-> Id int,
-> Name varchar(100),
-> Age int,
-> AdmissionDate datetime
-> );
Query OK, 0 rows affected (0.53 sec)

샘플 데이터 삽입하기

INSERT 명령을 사용해 몇 개의 레코드를 추가합니다. 시간 정보가 있는 데이터와 없는 데이터를 함께 넣어 보겠습니다.

mysql> insert into AllRecordsFromadate values(101,'John',23,'2018-10-13');
Query OK, 1 row affected (0.18 sec)

mysql> insert into AllRecordsFromadate values(102,'Carol',24,'2014-12-5 12:34:50');
Query OK, 1 row affected (0.18 sec)

mysql> insert into AllRecordsFromadate values(103,'Mike',25,'2014-12-5 12:30:40');
Query OK, 1 row affected (0.23 sec)

mysql> insert into AllRecordsFromadate values(104,'Bob',24,'2015-10-7 11:10:20');
Query OK, 1 row affected (0.20 sec)

mysql> insert into AllRecordsFromadate values(105,'Sam',25,'2011-6-26 10:10:20');
Query OK, 1 row affected (0.11 sec)

전체 데이터 확인하기

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

mysql> select *from AllRecordsFromadate;

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

+------+-------+------+---------------------+
| Id   | Name  | Age  | AdmissionDate       |
+------+-------+------+---------------------+
| 101  | John  | 23   | 2018-10-13 00:00:00 |
| 102  | Carol | 24   | 2014-12-05 12:34:50 |
| 103  | Mike  | 25   | 2014-12-05 12:30:40 |
| 104  | Bob   | 24   | 2015-10-07 11:10:20 |
| 105  | Sam   | 25   | 2011-06-26 10:10:20 |
+------+-------+------+---------------------+
5 rows in set (0.00 sec)

특정 날짜로 레코드 조회하기

이제 DATE() 함수를 활용해 '2014-12-05'라는 특정 날짜에 해당하는 레코드만 조회해 보겠습니다.

mysql> SELECT * FROM AllRecordsFromadate WHERE DATE(AdmissionDate) = '2014-12-05';

시간이 다르더라도 날짜가 일치하는 두 개의 레코드(Carol, Mike)가 함께 반환됩니다.

+------+-------+------+---------------------+
| Id   | Name  | Age  | AdmissionDate       |
+------+-------+------+---------------------+
| 102  | Carol | 24   | 2014-12-05 12:34:50 |
| 103  | Mike  | 25   | 2014-12-05 12:30:40 |
+------+-------+------+---------------------+
2 rows in set (0.00 sec)

성능을 고려한 대안: 범위 조건 사용하기

DATE() 함수는 사용법이 간단하지만, 컬럼에 함수를 적용하면 해당 컬럼에 생성된 인덱스를 활용할 수 없어 대용량 테이블에서는 성능이 저하될 수 있습니다. 인덱스를 활용하려면 아래처럼 범위 조건을 사용하는 것이 좋습니다.

SELECT * FROM AllRecordsFromadate
WHERE AdmissionDate >= '2014-12-05'
  AND AdmissionDate < '2014-12-06';

이 방식은 AdmissionDate 컬럼의 인덱스를 그대로 사용할 수 있어, 데이터 양이 많은 환경에서 훨씬 빠른 조회 성능을 기대할 수 있습니다.