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

MySQL 쿼리에서 만료 날짜 확인하는 방법 – NOW() 함수 완벽 가이드

MySQL에서 만료 날짜를 확인하는 방법

데이터베이스에서 약품 유효기간처럼 만료 날짜가 지난 데이터를 걸러내야 하는 경우가 자주 있습니다. MySQL에서는 NOW() 함수를 사용하면 현재 날짜와 시간을 기준으로 만료 여부를 손쉽게 확인할 수 있습니다.

기본 문법

만료 날짜가 현재 시점보다 이후인 레코드만 조회하려면 다음과 같이 작성합니다.

SELECT * FROM yourTableName
WHERE yourColumnName > NOW();

실습 예제: 테이블 생성하기

먼저 실습에 사용할 테이블을 생성해 보겠습니다. 아래 예제는 약품의 만료 날짜(expiryDateOfMedicine)를 저장하는 테이블입니다.

mysql> CREATE TABLE DemoTable (
    Id INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
    expiryDateOfMedicine DATETIME
   );
Query OK, 0 rows affected (0.55 sec)

데이터 삽입하기

INSERT 명령어를 사용해 샘플 데이터를 입력합니다.

mysql> INSERT INTO DemoTable(expiryDateOfMedicine) VALUES('2019-04-27 11:29:00');
Query OK, 1 row affected (0.36 sec)
mysql> INSERT INTO DemoTable(expiryDateOfMedicine) VALUES('2019-04-26 10:39:21');
Query OK, 1 row affected (0.41 sec)
mysql> INSERT INTO DemoTable(expiryDateOfMedicine) VALUES('2019-04-28 11:30:10');
Query OK, 1 row affected (0.18 sec)
mysql> INSERT INTO DemoTable(expiryDateOfMedicine) VALUES('2019-04-29 12:44:11');
Query OK, 1 row affected (0.18 sec)

저장된 전체 데이터 조회하기

SELECT 문을 실행하면 테이블에 저장된 모든 레코드를 확인할 수 있습니다.

mysql> SELECT * FROM DemoTable;

실행 결과는 다음과 같습니다.

+----+----------------------+
| Id | expiryDateOfMedicine |
+----+----------------------+
| 1  | 2019-04-27 11:29:00  |
| 2  | 2019-04-26 10:39:21  |
| 3  | 2019-04-28 11:30:10  |
| 4  | 2019-04-29 12:44:11  |
+----+----------------------+
4 rows in set (0.00 sec)

NOW() 함수로 유효한(만료되지 않은) 데이터 조회하기

이제 핵심인 만료 날짜 검증 쿼리입니다. WHERE 절에서 컬럼 값이 NOW()보다 큰지 비교하면, 현재 시점 기준으로 아직 만료되지 않은 레코드만 필터링할 수 있습니다.

mysql> SELECT * FROM DemoTable
WHERE expiryDateOfMedicine > NOW();

실행 결과는 다음과 같습니다.

+----+----------------------+
| Id | expiryDateOfMedicine |
+----+----------------------+
| 3  | 2019-04-28 11:30:10  |
| 4  | 2019-04-29 12:44:11  |
+----+----------------------+
2 rows in set (0.00 sec)

정리 및 추가 팁

NOW() 함수는 쿼리가 실행되는 순간의 날짜와 시간을 반환하기 때문에, 만료 관리 로직을 구현할 때 매우 유용합니다. 몇 가지 참고할 만한 팁은 다음과 같습니다.

1. 반대 조건: 이미 만료된 데이터를 조회하려면 조건을 < NOW()로 변경하면 됩니다.

2. 날짜만 비교: 시간까지 비교할 필요가 없다면 CURDATE() 함수나 DATE(NOW())를 사용해 날짜 단위로 비교할 수 있습니다.

3. 성능 최적화: 만료 날짜 컬럼에 인덱스(INDEX)를 생성해 두면 대량의 데이터에서도 빠른 조회가 가능합니다.

이처럼 NOW() 함수 하나만으로도 유효기간 검증, 재고 관리, 회원 자격 확인 등 다양한 실무 시나리오에 활용할 수 있습니다.