MySQL에서 현재 날짜(CURDATE())가 테이블에 저장된 시작일과 종료일 사이에 속하는지 확인해야 하는 경우가 자주 있습니다. 예를 들어 이벤트 기간, 구독 유효 기간, 프로모션 일정 등을 검증할 때 유용합니다. 이 글에서는 비교 연산자를 활용해 간단하게 날짜 범위 포함 여부를 판별하는 방법을 단계별로 살펴보겠습니다.
1. 예제 테이블 생성
먼저 시작일(StartDate)과 종료일(EndDate)을 저장할 테이블을 생성합니다.
mysql> create table DemoTable1448
-> (
-> StartDate date,
-> EndDate date
-> );
Query OK, 0 rows affected (0.46 sec)
2. 샘플 데이터 삽입
INSERT 문을 사용해 여러 개의 날짜 범위를 입력합니다.
mysql> insert into DemoTable1448 values('2019-01-21','2019-03-22');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable1448 values('2019-04-05','2019-10-10');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable1448 values('2019-10-01','2019-10-29');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1448 values('2018-12-31','2019-12-31');
Query OK, 1 row affected (0.12 sec)
3. 저장된 데이터 확인
SELECT 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select * from DemoTable1448;
실행 결과는 다음과 같습니다.
+------------+------------+ | StartDate | EndDate | +------------+------------+ | 2019-01-21 | 2019-03-22 | | 2019-04-05 | 2019-10-10 | | 2019-10-01 | 2019-10-29 | | 2018-12-31 | 2019-12-31 | +------------+------------+ 4 rows in set (0.00 sec)
4. 현재 날짜가 범위에 속하는지 확인하는 쿼리
현재 날짜가 2019-10-05라고 가정해 보겠습니다. 아래 쿼리는 CURDATE() 함수로 오늘 날짜를 가져온 뒤, 시작일보다 크거나 같고 종료일보다 작거나 같은지를 비교합니다.
mysql> select (curdate() >=StartDate and curdate() <=EndDate) as DateInRange from DemoTable1448;
결과는 다음과 같습니다.
+-------------+ | DateInRange | +-------------+ | 0 | | 1 | | 1 | | 1 | +-------------+ 4 rows in set (0.04 sec)
결과 해석
조건이 참이면 1, 거짓이면 0이 반환됩니다.
- 2019-01-21 ~ 2019-03-22: 현재 날짜(2019-10-05)가 범위를 벗어나므로 0
- 2019-04-05 ~ 2019-10-10: 범위에 포함되므로 1
- 2019-10-01 ~ 2019-10-29: 범위에 포함되므로 1
- 2018-12-31 ~ 2019-12-31: 범위에 포함되므로 1
추가 팁: BETWEEN 연산자 활용
같은 조건을 BETWEEN 연산자를 사용해 더 가독성 좋게 작성할 수도 있습니다.
mysql> select (curdate() BETWEEN StartDate AND EndDate) as DateInRange from DemoTable1448;
BETWEEN은 양 끝값(시작일과 종료일)을 모두 포함하므로 위의 비교 연산자 방식과 동일한 결과를 반환합니다. 또한 특정 행만 필터링하고 싶다면 WHERE 절과 함께 사용하면 됩니다.
mysql> SELECT * FROM DemoTable1448
-> WHERE curdate() BETWEEN StartDate AND EndDate;
이처럼 CURDATE() 함수와 비교 연산자 또는 BETWEEN을 조합하면, 현재 날짜가 지정된 날짜 범위에 속하는지 손쉽게 판별할 수 있습니다.