MySQL에서 마감일(duedate)이 현재 날짜보다 이전인지, 또는 NULL 값인지 같은 조건을 확인하려면 IF() 함수를 사용하면 됩니다. 이 글에서는 실제 예제를 통해 마감일과 현재 날짜(CURDATE())를 비교하는 방법을 단계별로 살펴보겠습니다.
1. 테이블 생성하기
먼저 마감일을 저장할 테이블을 생성합니다.
mysql> create table demo89
-> (
-> duedate date
-> );
Query OK, 0 rows affected (0.78 sec)2. 샘플 데이터 삽입하기
INSERT 명령어를 사용해 테이블에 여러 개의 날짜 레코드를 입력합니다. 의도적으로 NULL 값도 함께 넣어 다양한 경우를 테스트해 보겠습니다.
mysql> insert into demo89 values('2020-01-10');
Query OK, 1 row affected (0.55 sec)
mysql> insert into demo89 values(null);
Query OK, 1 row affected (0.13 sec)
mysql> insert into demo89 values('2020-11-29');
Query OK, 1 row affected (0.15 sec)
mysql> insert into demo89 values('2019-11-29');
Query OK, 1 row affected (0.09 sec)3. 저장된 데이터 확인하기
SELECT 문으로 테이블에 저장된 레코드를 조회합니다.
mysql> select *from demo89;
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+------------+ | duedate | +------------+ | 2020-01-10 | | NULL | | 2020-11-29 | | 2019-11-29 | +------------+ 4 rows in set (0.00 sec)
4. IF() 함수로 마감일 유효성 검사하기
이제 핵심 부분입니다. 아래 쿼리는 IF() 함수와 CURDATE()(현재 날짜) 함수를 조합하여 각 레코드의 마감일이 유효한지 검사합니다.
- 마감일이 NULL이거나
- 마감일이 현재 날짜보다 이전이면
'Wrong Date'라는 문자열을 반환하고, 그렇지 않으면 원래의 마감일 값을 그대로 출력합니다.
mysql> select if (duedate is null
-> or duedate < curdate(),'Wrong Date',duedate) as Result
-> from demo89;실행 결과는 다음과 같습니다.
+------------+ | Result | +------------+ | Wrong Date | | Wrong Date | | 2020-11-29 | | Wrong Date | +------------+ 4 rows in set (0.00 sec)
결과 해석
출력 결과를 보면 '2020-11-29'만 유효한 날짜로 표시되고, 나머지 세 개의 레코드는 모두 'Wrong Date'로 반환된 것을 확인할 수 있습니다.
- 2020-01-10: 현재 날짜보다 이전이므로 'Wrong Date'
- NULL: 값이 없으므로 'Wrong Date'
- 2020-11-29: 현재 날짜 이후의 유효한 마감일이므로 날짜 그대로 출력
- 2019-11-29: 현재 날짜보다 이전이므로 'Wrong Date'
이처럼 IF() 함수와 CURDATE() 함수를 함께 사용하면 만료된 날짜나 누락된 날짜 데이터를 손쉽게 필터링하고 검증할 수 있습니다. 실무에서는 이 로직을 WHERE 절에 응용하여 유효한 기한 내의 레코드만 조회하는 데 활용할 수 있습니다.