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

MySQL 타임스탬프 필드에서 특정 날짜 검색하기 – DATE() 함수 완벽 가이드

MySQL에서 타임스탬프(timestamp) 필드에 저장된 데이터 중 특정 날짜에 해당하는 레코드를 찾고 싶다면 DATE() 함수를 활용하면 됩니다. DATE() 함수는 날짜와 시간이 함께 저장된 값에서 날짜 부분만 추출해 주기 때문에, 시간 정보를 무시하고 순수하게 날짜 기준으로 비교할 수 있습니다.

1. 예제 테이블 생성

먼저 실습에 사용할 테이블을 생성해 보겠습니다. 학생 ID는 자동 증가(AUTO_INCREMENT) 기본 키로 설정하고, 입학 날짜는 timestamp 타입으로 정의합니다.

mysql> create table DemoTable
(
    StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
    StudentAdmissionDate timestamp
);
Query OK, 0 rows affected (0.63 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용하여 여러 개의 입학 날짜 레코드를 추가합니다.

mysql> insert into DemoTable(StudentAdmissionDate) values('2011-01-12 12:34:43');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2012-10-23 11:32:21');
Query OK, 1 row affected (0.18 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2001-02-14 05:12:01');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2018-12-31 15:10:04');
Query OK, 1 row affected (0.22 sec)
mysql> insert into DemoTable(StudentAdmissionDate) values('2019-04-16 11:04:10');
Query OK, 1 row affected (0.81 sec)

3. 전체 레코드 확인

SELECT 문으로 테이블의 모든 데이터를 조회하면 다음과 같습니다.

mysql> select *from DemoTable;
+-----------+----------------------+
| StudentId | StudentAdmissionDate |
+-----------+----------------------+
| 1         | 2011-01-12 12:34:43  |
| 2         | 2012-10-23 11:32:21  |
| 3         | 2001-02-14 05:12:01  |
| 4         | 2018-12-31 15:10:04  |
| 5         | 2019-04-16 11:04:10  |
+-----------+----------------------+
5 rows in set (0.00 sec)

4. DATE() 함수로 특정 날짜 검색하기

타임스탬프 필드에서 시간과 관계없이 특정 날짜의 레코드만 조회하려면 WHERE 절에서 DATE() 함수를 사용합니다. 아래 쿼리는 입학 날짜가 2001년 2월 14일인 학생을 검색하는 예제입니다.

mysql> select *from DemoTable where date(StudentAdmissionDate)='2001-02-14';
+-----------+----------------------+
| StudentId | StudentAdmissionDate |
+-----------+----------------------+
| 3         | 2001-02-14 05:12:01  |
+-----------+----------------------+
1 row in set (0.04 sec)

시간 값(05:12:01)이 무시되고 날짜 조건에 일치하는 레코드만 정확히 반환된 것을 확인할 수 있습니다.

5. 날짜 범위로 검색하기

특정 날짜뿐 아니라 시작일과 종료일 사이의 데이터를 조회할 수도 있습니다. 이 경우에는 DATE() 함수 대신 비교 연산자(>=, <)를 직접 사용하는 것이 좋습니다.

mysql> select *from DemoTable where StudentAdmissionDate >='2012-01-01' and StudentAdmissionDate < '2019-12-01';
+-----------+----------------------+
| StudentId | StudentAdmissionDate |
+-----------+----------------------+
| 2         | 2012-10-23 11:32:21  |
| 4         | 2018-12-31 15:10:04  |
| 5         | 2019-04-16 11:04:10  |
+-----------+----------------------+
3 rows in set (0.00 sec)

성능 최적화 팁

WHERE 절에서 DATE() 함수를 사용하면 인덱스가 있어도 제대로 활용되지 않아 대용량 테이블에서 성능 저하가 발생할 수 있습니다. 따라서 위의 범위 검색 예제처럼 >= '날짜' AND < '다음 날짜' 형태로 조건을 작성하면 인덱스를 효율적으로 사용할 수 있어 더 빠른 조회가 가능합니다.