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'까지 명시하거나 '<' 연산자와 함께 다음 날짜를 사용하는 것이 좋습니다.