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

MySQL에서 특정 월과 연도의 레코드 조회하기 – MONTH(), YEAR() 함수 활용법

MySQL에서 특정 의 데이터를 조회하려면 MONTH() 함수를, 특정 연도의 데이터를 조회하려면 YEAR() 함수를 사용하면 됩니다. 두 함수를 WHERE 절에서 함께 조합하면 원하는 월과 연도에 해당하는 레코드만 정확하게 추출할 수 있습니다. 지금부터 예제를 통해 단계별로 살펴보겠습니다.

1. 테이블 생성하기

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

mysql> create table DemoTable
(
    StudentName varchar(40),
    StudentAdmissionDate date
);
Query OK, 0 rows affected (0.67 sec)

2. 샘플 데이터 삽입하기

INSERT 명령을 사용해 테이블에 여러 개의 레코드를 추가합니다.

mysql> insert into DemoTable values('Chris','2019-01-21');
Query OK, 1 row affected (0.10 sec)
mysql> insert into DemoTable values('Robert','2018-09-05');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable values('Mike','2019-09-05');
Query OK, 1 row affected (0.08 sec)
mysql> insert into DemoTable values('David','2019-10-04');
Query OK, 1 row affected (0.14 sec)

3. 전체 레코드 확인하기

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

mysql> select *from DemoTable;

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

+-------------+----------------------+
| StudentName | StudentAdmissionDate |
+-------------+----------------------+
| Chris       | 2019-01-21           |
| Robert      | 2018-09-05           |
| Mike        | 2019-09-05           |
| David       | 2019-10-04           |
+-------------+----------------------+
4 rows in set (0.00 sec)

4. 특정 월과 연도로 레코드 조회하기

다음은 2019년 9월에 해당하는 레코드만 반환하는 쿼리입니다. WHERE 절에서 MONTH() 함수와 YEAR() 함수를 함께 사용해 날짜 컬럼의 월과 연도를 각각 비교합니다.

mysql> select *from DemoTable where month(StudentAdmissionDate)=09 and year(StudentAdmissionDate)=2019;

위 쿼리를 실행하면 다음과 같은 결과가 출력됩니다.

+-------------+----------------------+
| StudentName | StudentAdmissionDate |
+-------------+----------------------+
| Mike        | 2019-09-05           |
+-------------+----------------------+
1 row in set (0.00 sec)

결과를 보면 2019년 9월에 입학한 Mike(2019-09-05)의 레코드 하나만 정확히 조회된 것을 확인할 수 있습니다.

성능을 위한 추가 팁

날짜 컬럼에 함수를 직접 적용하면 인덱스를 제대로 활용하지 못해 대용량 테이블에서 성능이 저하될 수 있습니다. 데이터 양이 많다면 아래처럼 날짜 범위 조건을 사용하는 방식이 더 효율적입니다.

mysql> select *from DemoTable 
    where StudentAdmissionDate >= '2019-09-01' 
      and StudentAdmissionDate < '2019-10-01';

두 방식 모두 동일한 결과를 반환하지만, 범위 조건 방식은 인덱스 스캔을 활용할 수 있어 실무 환경에서 권장됩니다.