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

MySQL에서 특정 날짜와 시간의 레코드를 조회하는 방법

MySQL에서 BETWEEN 절을 사용하면 특정 날짜와 시간에 해당하는 레코드를 손쉽게 조회할 수 있습니다. BETWEEN 절은 시작 값과 끝 값을 모두 포함하는 범위 조건으로 동작하기 때문에, DATETIME 타입의 컬럼에서 원하는 기간의 데이터를 추출할 때 매우 유용합니다.

BETWEEN 절의 기본 문법

SELECT * FROM 테이블명
WHERE 컬럼명 BETWEEN '시작날짜시간' AND '종료날짜시간';

이제 실제 예제를 통해 위 문법이 어떻게 동작하는지 단계별로 살펴보겠습니다.

1. 예제 테이블 생성

먼저 입학 날짜 정보를 저장할 테이블을 생성합니다. 다음 쿼리를 사용합니다.

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

2. 샘플 데이터 삽입

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)

3. 전체 레코드 확인

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)

4. 특정 날짜와 시간 범위로 조회하기

이제 BETWEEN 절을 활용해 '2014-12-05' 날짜의 오전 10시부터 오후 12시 50분 사이에 해당하는 레코드만 조회해 보겠습니다.

mysql> select *from AllRecordsFromadate where AdmissionDate between '2014-12-05 10:00:00' and '2014-12-05 12:50:58';

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

+------+-------+------+---------------------+
| 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)

결과를 보면 지정한 시간 범위에 포함된 Carol과 Mike의 레코드만 반환된 것을 확인할 수 있습니다.

참고 사항

BETWEEN 절은 시작 값과 종료 값을 모두 포함(inclusive)한다는 점에 유의해야 합니다. 또한 DATETIME 컬럼에서 날짜만 지정하면 시간은 자동으로 '00:00:00'으로 처리되므로, 하루 전체의 데이터를 조회하려면 종료 날짜에 '23:59:59'까지 명시하거나 '<' 연산자와 함께 다음 날짜를 사용하는 것이 좋습니다.