MySQL에서 날짜 경과 여부 확인하기
MySQL에서 특정 날짜(예: 마감일)가 이미 지났는지 아직 남아 있는지 확인하려면, 저장된 DATE 컬럼의 값과 CURDATE() 함수가 반환하는 현재 날짜를 비교하면 됩니다. 이 글에서는 테이블 생성부터 실제 쿼리 실행까지 단계별로 살펴보겠습니다.
1단계: 테이블 생성
먼저 마감일(Deadline)을 저장할 DATE 타입의 컬럼을 가진 테이블을 생성합니다.
mysql> create table DemoTable1340
-> (
-> Deadline date
-> );
Query OK, 0 rows affected (0.43 sec)
2단계: 샘플 데이터 삽입
INSERT 명령을 사용해 여러 개의 날짜 레코드를 삽입합니다.
mysql> insert into DemoTable1340 values('2019-09-18');
Query OK, 1 row affected (0.52 sec)
mysql> insert into DemoTable1340 values('2019-09-23');
Query OK, 1 row affected (0.11 sec)
mysql> insert into DemoTable1340 values('2018-12-24');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1340 values('2016-11-01');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable1340 values('2019-09-28');
Query OK, 1 row affected (0.18 sec)3단계: 전체 레코드 조회
SELECT 문으로 테이블에 저장된 모든 레코드를 확인합니다.
mysql> select * from DemoTable1340;
실행 결과는 다음과 같습니다.
+------------+
| Deadline |
+------------+
| 2019-09-18 |
| 2019-09-23 |
| 2018-12-24 |
| 2016-11-01 |
| 2019-09-28 |
+------------+
5 rows in set (0.00 sec)
4단계: 현재 날짜 확인
날짜를 비교하려면 기준이 되는 오늘 날짜를 알아야 합니다. MySQL에서는 CURDATE() 함수로 현재 날짜를 손쉽게 구할 수 있습니다.
mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2019-09-21 |
+------------+
1 row in set (0.00 sec)
현재 날짜는 2019-09-21입니다.
5단계: 날짜가 지났는지 확인하는 쿼리
아직 지나지 않은 날짜, 즉 오늘 또는 미래의 마감일만 조회하려면 >= 연산자와 함께 CURDATE()를 비교 조건으로 사용합니다.
mysql> select * from DemoTable1340 where Deadline >= curdate();
실행 결과는 다음과 같습니다.
+------------+
| Deadline |
+------------+
| 2019-09-23 |
| 2019-09-28 |
+------------+
2 rows in set (0.00 sec)
핵심 정리 및 응용 팁
- 마감일이 남아 있는 레코드 조회:
WHERE Deadline >= CURDATE() - 이미 지난 날짜(기한 만료) 조회:
WHERE Deadline < CURDATE() - 오늘 날짜 포함 여부:
>=는 오늘 날짜도 결과에 포함하고,<는 제외합니다.
이처럼 CURDATE()와 비교 연산자만 활용하면 별도의 복잡한 함수 없이도 날짜 경과 여부를 간단하게 판별할 수 있습니다. 참고로 시간(시·분·초)까지 함께 비교해야 하는 경우에는 NOW() 함수나 TIMESTAMP 타입을 사용하는 것이 좋습니다.