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

MySQL에서 YEAR() 함수로 특정 연도별 레코드 조회하기

MySQL에서 날짜 데이터가 저장된 테이블에서 특정 연도에 해당하는 레코드만 조회하고 싶을 때가 있습니다. 이럴 때는 YEAR() 함수를 활용하면 간단하게 해결할 수 있습니다.

기본 문법

연도별로 레코드를 가져오려면 WHERE 절에서 YEAR() 함수를 다음과 같이 사용합니다.

SELECT * FROM yourTableName
WHERE YEAR(yourColumnName) = yourYearValue;

예제 테이블 생성

먼저 실습에 사용할 테이블을 만들어 보겠습니다.

mysql> CREATE TABLE DemoTable
-> (
-> CustomerName varchar(100),
-> ShippingDate datetime
-> );
Query OK, 0 rows affected (0.64 sec)

데이터 삽입

INSERT 명령어를 사용해 몇 개의 샘플 레코드를 추가합니다.

mysql> INSERT INTO DemoTable VALUES('Chris','2019-01-21');
Query OK, 1 row affected (0.28 sec)

mysql> INSERT INTO DemoTable VALUES('Robert','2018-02-21');
Query OK, 1 row affected (0.13 sec)

mysql> INSERT INTO DemoTable VALUES('David','2016-04-01');
Query OK, 1 row affected (0.17 sec)

전체 데이터 확인

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

mysql> SELECT * FROM DemoTable;

위 쿼리는 아래와 같은 결과를 출력합니다.

+--------------+---------------------+
| CustomerName | ShippingDate |
+--------------+---------------------+
| Chris | 2019-01-21 00:00:00 |
| Robert | 2018-02-21 00:00:00 |
| David | 2016-04-01 00:00:00 |
+--------------+---------------------+
3 rows in set (0.00 sec)

특정 연도로 레코드 조회하기

이제 YEAR() 함수를 사용해 배송일(ShippingDate)이 2016년인 레코드만 조회하는 쿼리를 실행해 보겠습니다.

mysql> SELECT * FROM DemoTable
-> WHERE YEAR(ShippingDate) = 2016;

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

+--------------+---------------------+
| CustomerName | ShippingDate |
+--------------+---------------------+
| David | 2016-04-01 00:00:00 |
+--------------+---------------------+
1 row in set (0.04 sec)

결과를 보면 ShippingDate가 2016년인 David의 레코드 하나만 정확히 반환된 것을 확인할 수 있습니다.

성능 팁

참고로, 데이터 양이 많은 대용량 테이블에서는 WHERE 절에 함수를 적용하면 인덱스를 제대로 활용하지 못할 수 있습니다. 이 경우 아래처럼 범위 조건으로 작성하면 성능을 개선할 수 있습니다.

SELECT * FROM DemoTable
WHERE ShippingDate >= '2016-01-01'
AND ShippingDate < '2017-01-01';

이 방식은 ShippingDate 컬럼에 인덱스가 있다면 해당 인덱스를 그대로 활용할 수 있어 더 빠른 조회가 가능합니다.