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

MySQL에서 MONTH()와 YEAR() 함수로 특정 월과 연도별 데이터 검색하기

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)=7YEAR(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 컬럼에 인덱스가 설정되어 있으면 인덱스를 그대로 활용할 수 있어 훨씬 빠른 조회 속도를 기대할 수 있습니다.