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

MySQL에서 특정 월과 연도를 기준으로 레코드 조회하는 방법

```html

MySQL에서 날짜 데이터가 저장된 테이블에서 특정 월과 연도에 해당하는 레코드만 조회하고 싶다면 MONTH() 함수와 YEAR() 함수를 함께 사용하면 됩니다. 이 두 함수는 각각 DATE 타입 값에서 월과 연도를 숫자로 추출해 주기 때문에 WHERE 절에서 조건 비교에 활용하기 매우 편리합니다.

1. 예제 테이블 생성

먼저 구매 날짜(PurchaseDate)를 저장할 테이블을 생성합니다.

mysql> create table DemoTable1846
    (
    PurchaseDate date
    );
Query OK, 0 rows affected (0.00 sec)

2. 샘플 데이터 삽입

INSERT 문을 사용하여 여러 날짜의 레코드를 추가합니다.

mysql> insert into DemoTable1846 values('2019-01-10');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1846 values('2019-12-24');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1846 values('2018-09-21');
Query OK, 1 row affected (0.00 sec)
mysql> insert into DemoTable1846 values('2017-10-26');
Query OK, 1 row affected (0.00 sec)

3. 전체 레코드 확인

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

mysql> select * from DemoTable1846;

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

+--------------+
| PurchaseDate |
+--------------+
| 2019-01-10   |
| 2019-12-24   |
| 2018-09-21   |
| 2017-10-26   |
+--------------+
4 rows in set (0.00 sec)

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

이제 핵심 쿼리입니다. 아래처럼 MONTH() 함수로 월을, YEAR() 함수로 연도를 추출한 뒤 WHERE 절에서 원하는 값과 비교하면 해당 조건에 맞는 레코드만 가져올 수 있습니다.

mysql> select * from DemoTable1846
    where month(PurchaseDate)=12
    and year(PurchaseDate)=2019;

위 쿼리는 2019년 12월에 해당하는 레코드만 반환하며, 실행 결과는 다음과 같습니다.

+--------------+
| PurchaseDate |
+--------------+
| 2019-12-24   |
+--------------+
1 row in set (0.00 sec)

참고 사항

MONTH()는 1~12 사이의 정수를, YEAR()는 네 자리 연도 값을 반환합니다. 다만 대용량 테이블에서 이 방식은 인덱스를 활용하지 못할 수 있으므로, 성능이 중요한 경우에는 PurchaseDate >= '2019-12-01' AND PurchaseDate < '2020-01-01'처럼 범위 조건을 사용하는 것이 좋습니다.