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

MySQL에서 현재 날짜의 월과 일을 비교해 날짜 레코드 조회하는 방법

MySQL에서 현재 날짜와 월(Month)일(Day)이 같은 레코드를 조회하려면 MONTH() 함수와 DAY() 함수를 함께 사용하면 됩니다. 이 방법은 기념일처럼 연도와 관계없이 특정 월·일에 해당하는 데이터를 찾을 때 특히 유용합니다.

1. 테이블 생성하기

먼저 예제로 사용할 테이블을 생성합니다.

mysql> create table DemoTable1429
-> (
-> AnniversaryDate date
-> );

2. 샘플 데이터 삽입하기

INSERT 문을 이용해 몇 개의 기념일 날짜를 입력합니다.

mysql> insert into DemoTable1429 values('2019-09-29');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable1429 values('2018-09-27');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1429 values('2016-09-28');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable1429 values('2015-09-29');
Query OK, 1 row affected (0.12 sec)

3. 전체 레코드 확인하기

SELECT 문으로 테이블에 저장된 모든 레코드를 조회해 보겠습니다.

mysql> select * from DemoTable1429;

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

+-----------------+
| AnniversaryDate |
+-----------------+
| 2019-09-29 |
| 2018-09-27 |
| 2016-09-28 |
| 2015-09-29 |
+-----------------+
4 rows in set (0.00 sec)

4. 현재 날짜 확인하기

CURDATE() 함수로 오늘 날짜를 먼저 확인합니다. 예제 기준 현재 날짜는 2019년 9월 29일입니다.

mysql> select curdate();
+------------+
| curdate() |
+------------+
| 2019-09-29 |
+------------+
1 row in set (0.00 sec)

5. 현재 날짜의 월·일과 비교하는 쿼리

이제 MONTH()DAY() 함수를 WHERE 절에 적용하여, 저장된 날짜의 월과 일이 현재 날짜의 월과 일과 일치하는 레코드만 조회해 보겠습니다.

mysql> select * from DemoTable1429
-> where month(AnniversaryDate)=month(curdate())
-> and day(AnniversaryDate)=day(curdate());

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

+-----------------+
| AnniversaryDate |
+-----------------+
| 2019-09-29 |
| 2015-09-29 |
+-----------------+
2 rows in set (0.00 sec)

결과 해석

현재 날짜가 2019-09-29이므로, 월(09)과 일(29)이 모두 일치하는 2019-09-292015-09-29 두 개의 레코드만 반환되었습니다. 연도가 달라도 월과 일만 같으면 조회되는 것을 확인할 수 있습니다.

참고 사항

이 쿼리는 매년 반복되는 기념일, 생일 알림, 정기 이벤트 대상자 추출 등에 활용할 수 있습니다. 단, 컬럼에 함수를 적용하면 인덱스를 활용하지 못할 수 있으므로, 대용량 테이블에서는 별도의 월·일 컬럼을 추가하거나 생성된 컬럼(generated column)과 인덱스를 함께 사용하는 것이 성능 면에서 유리합니다.