MySQL에서 날짜(datetime) 컬럼을 대상으로 특정 월과 연도에 해당하는 레코드를 검색하려면 MONTH() 함수와 YEAR() 함수를 사용하면 됩니다. 예를 들어 '2015-07-01 11:15:30' 형식의 날짜 데이터 중 2015년 7월에 해당하는 행만 조회할 수 있습니다.
1. 테이블 생성
먼저 데모용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable ( Id int NOT NULL AUTO_INCREMENT PRIMARY KEY, ShippingDate datetime ); Query OK, 0 rows affected (0.54 sec)
2. 샘플 데이터 삽입
INSERT 명령을 사용하여 몇 개의 배송 날짜 레코드를 추가합니다.
mysql> insert into DemoTable(ShippingDate) values('2019-01-21 10:40:21');
Query OK, 1 row affected (0.20 sec)
mysql> insert into DemoTable(ShippingDate) values('2015-07-01 11:15:30');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(ShippingDate) values('2012-12-31 10:45:56');
Query OK, 1 row affected (0.14 sec)3. 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+----+---------------------+ | Id | ShippingDate | +----+---------------------+ | 1 | 2019-01-21 10:40:21 | | 2 | 2015-07-01 10:40:20 | | 3 | 2012-12-31 10:45:56 | +----+---------------------+ 3 rows in set (0.00 sec)
4. 월(MONTH)과 연도(YEAR)로 검색하기
다음은 MONTH(ShippingDate)=7과 YEAR(ShippingDate)=2015 조건을 사용하여 2015년 7월에 해당하는 레코드만 검색하는 쿼리입니다.
mysql> select *from DemoTable where MONTH(ShippingDate)=7 and YEAR(ShippingDate)=2015;
실행 결과는 다음과 같습니다.
+----+---------------------+ | Id | ShippingDate | +----+---------------------+ | 2 | 2015-07-01 11:15:30 | +----+---------------------+ 1 row in set (0.03 sec)
추가 팁: 성능 최적화
WHERE 절에서 MONTH()나 YEAR()처럼 컬럼에 함수를 적용하면 인덱스를 활용하지 못해 대량의 데이터에서는 성능이 저하될 수 있습니다. 이 경우 다음과 같이 범위 조건을 사용하는 것이 더 효율적입니다.
mysql> select *from DemoTable
-> where ShippingDate >= '2015-07-01 00:00:00'
-> and ShippingDate < '2015-08-01 00:00:00';이 방식은 ShippingDate 컬럼에 인덱스가 설정되어 있으면 인덱스를 그대로 활용할 수 있어 훨씬 빠른 조회 속도를 기대할 수 있습니다.