MySQL BETWEEN 절로 날짜 구간 조회하기
MySQL에서 특정 기간 사이의 데이터를 조회하려면 BETWEEN 문을 사용하면 됩니다. BETWEEN 절은 시작 날짜와 종료 날짜 사이에 포함된 모든 레코드를 손쉽게 필터링할 수 있는 강력한 도구입니다.
기본 문법
BETWEEN을 사용한 날짜 범위 조회의 기본 문법은 다음과 같습니다.
SELECT * FROM yourTableName
WHERE yourColumnName BETWEEN 'yourStartingDate' AND curdate();
여기서 curdate() 또는 now() 함수를 사용할 수 있으며, 두 함수 모두 현재 날짜 및 시간을 반환하므로 동일하게 작동합니다.
실습 예제: 테이블 생성하기
문법을 직접 이해하기 위해 예제 테이블을 먼저 생성해 보겠습니다.
mysql> CREATE TABLE BetweenDateDemo
-> (
-> StartDate datetime
-> );
Query OK, 0 rows affected (0.78 sec)
샘플 데이터 삽입
다음 쿼리를 사용하여 과거와 미래의 날짜 데이터를 삽입합니다. DATE_ADD() 함수에 음수 간격을 지정하면 과거 날짜, 양수 간격을 지정하면 미래 날짜가 생성됩니다.
mysql> INSERT INTO BetweenDateDemo VALUES(DATE_ADD(NOW(), INTERVAL -1 YEAR));
Query OK, 1 row affected (0.11 sec)
mysql> INSERT INTO BetweenDateDemo VALUES(DATE_ADD(NOW(), INTERVAL -2 YEAR));
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO BetweenDateDemo VALUES(DATE_ADD(NOW(), INTERVAL -3 YEAR));
Query OK, 1 row affected (0.13 sec)
mysql> INSERT INTO BetweenDateDemo VALUES(DATE_ADD(NOW(), INTERVAL 1 YEAR));
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO BetweenDateDemo VALUES(DATE_ADD(NOW(), INTERVAL 2 YEAR));
Query OK, 1 row affected (0.12 sec)
mysql> INSERT INTO BetweenDateDemo VALUES(DATE_ADD(NOW(), INTERVAL 3 YEAR));
Query OK, 1 row affected (0.16 sec)
전체 데이터 확인
SELECT 문으로 테이블의 모든 레코드를 조회해 보겠습니다.
mysql> SELECT * FROM BetweenDateDemo;
실행 결과는 다음과 같습니다.
+---------------------+
| StartDate |
+---------------------+
| 2017-12-08 11:45:47 |
| 2016-12-08 11:45:56 |
| 2015-12-08 11:46:01 |
| 2019-12-08 11:46:05 |
| 2020-12-08 11:46:11 |
| 2021-12-08 11:46:15 |
+---------------------+
6 rows in set (0.00 sec)
BETWEEN으로 날짜 구간 필터링하기
이제 앞서 설명한 문법을 적용하여 특정 날짜 구간의 데이터만 조회해 보겠습니다. 아래 예제는 2014년 8월 12일부터 오늘(curdate())까지의 레코드를 가져옵니다.
mysql> SELECT * FROM BetweenDateDemo
WHERE StartDate BETWEEN '2014-8-12' AND curdate();
미래 날짜(2019년~2021년)는 제외되고, 조건에 해당하는 3개의 레코드만 반환됩니다.
+---------------------+
| StartDate |
+---------------------+
| 2017-12-08 11:45:47 |
| 2016-12-08 11:45:56 |
| 2015-12-08 11:46:01 |
+---------------------+
3 rows in set (0.00 sec)
ORDER BY로 결과 정렬하기
조회 결과를 날짜순으로 정렬하려면 ORDER BY 절을 함께 사용하면 됩니다.
mysql> SELECT * FROM BetweenDateDemo
WHERE StartDate BETWEEN '2014-8-12' AND curdate()
ORDER BY StartDate;
결과가 오름차순으로 깔끔하게 정렬된 것을 확인할 수 있습니다.
+---------------------+
| StartDate |
+---------------------+
| 2015-12-08 11:46:01 |
| 2016-12-08 11:45:56 |
| 2017-12-08 11:45:47 |
+---------------------+
3 rows in set (0.00 sec)
정리
MySQL에서 날짜 범위 조회는 BETWEEN '시작날짜' AND 종료날짜 형식으로 간단히 처리할 수 있습니다. 종료 날짜 자리에 curdate()나 now()를 넣으면 현재 시점까지의 데이터를 동적으로 조회할 수 있으며, ORDER BY를 추가하면 원하는 순서로 정렬된 결과를 얻을 수 있습니다.