MySQL에서 오늘 날짜(CURDATE())부터 이번 달의 마지막 날(LAST_DAY()) 사이에 해당하는 레코드만 조회하는 방법을 알아보겠습니다. 핵심은 BETWEEN 연산자와 함께 CURDATE(), LAST_DAY() 함수를 사용하는 것입니다.
1. 테이블 생성하기
먼저 예제로 사용할 테이블을 생성합니다.
mysql> create table DemoTable
(
BookingDate date
);
Query OK, 0 rows affected (0.67 sec)2. 샘플 데이터 삽입하기
INSERT 명령을 사용해 여러 날짜 데이터를 입력합니다.
mysql> insert into DemoTable values('2019-09-21');
Query OK, 1 row affected (0.16 sec)
mysql> insert into DemoTable values('2018-09-10');
Query OK, 1 row affected (0.09 sec)
mysql> insert into DemoTable values('2019-09-10');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2019-09-08');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable values('2016-09-18');
Query OK, 1 row affected (0.17 sec)3. 전체 레코드 확인하기
SELECT 문으로 테이블의 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-------------+ | BookingDate | +-------------+ | 2019-09-21 | | 2018-09-10 | | 2019-09-10 | | 2019-09-08 | | 2016-09-18 | +-------------+ 5 rows in set (0.00 sec)
4. 현재 날짜부터 이번 달 말일까지 조회하기
다음 쿼리가 오늘 날짜부터 이번 달의 나머지 기간에 해당하는 레코드를 가져오는 핵심 쿼리입니다.
mysql> select *from DemoTable where BookingDate between curdate() and last_day(curdate());
각 함수의 역할은 다음과 같습니다.
- CURDATE(): 현재 시스템 날짜를 반환합니다.
- LAST_DAY(curdate()): 현재 날짜가 속한 달의 마지막 날짜를 반환합니다.
위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.
+-------------+ | BookingDate | +-------------+ | 2019-09-21 | | 2019-09-10 | | 2019-09-08 | +-------------+ 3 rows in set (0.01 sec)
결과를 보면 현재 날짜(예: 2019-09-08)와 같거나 이후이면서, 이번 달(9월)의 마지막 날 이전인 레코드만 필터링되어 반환된 것을 확인할 수 있습니다. 과거 연도의 데이터(2018년, 2016년)는 자동으로 제외됩니다.
정리
이처럼 BETWEEN curdate() AND last_day(curdate()) 패턴을 활용하면 별도의 날짜 계산 없이 간단하게 "오늘부터 월말까지"의 데이터를 조회할 수 있습니다. 예약 시스템이나 일정 관리 기능에서 이번 달 남은 예약 내역을 확인할 때 특히 유용하게 사용할 수 있습니다.