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

MySQL 쿼리로 현재 날짜가 특정 날짜 범위에 포함되는지 확인하는 방법

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을 조합하면, 현재 날짜가 지정된 날짜 범위에 속하는지 손쉽게 판별할 수 있습니다.