yyyy-mm-dd 구조로 저장된 날짜 컬럼에서 특정 연도(yyyy)와 일치하는 데이터를 조회하려면 MySQL의 YEAR() 함수를 사용하면 됩니다. 기본 문법은 다음과 같습니다.
select * from yourTableName where year(yourColumnName)='yourYearValue';
YEAR() 함수는 DATE 타입의 값에서 연도 부분만 추출해 반환하기 때문에, 전체 날짜가 아닌 연도 기준으로 간단하게 조건을 걸 수 있다는 장점이 있습니다.
1. 테이블 생성
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table DemoTable1322
-> (
-> DOB date
-> );
Query OK, 0 rows affected (0.55 sec)
2. 데이터 삽입
INSERT 명령을 사용해 몇 개의 생일(DOB) 레코드를 추가합니다.
mysql> insert into DemoTable1322 values('1999-04-12');
Query OK, 1 row affected (0.68 sec)
mysql> insert into DemoTable1322 values('2010-12-01');
Query OK, 1 row affected (0.15 sec)
mysql> insert into DemoTable1322 values('2015-03-09');
Query OK, 1 row affected (0.25 sec)
mysql> insert into DemoTable1322 values('2007-05-24');
Query OK, 1 row affected (0.08 sec)3. 전체 데이터 확인
SELECT 문으로 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select * from DemoTable1322;
실행 결과:
+------------+
| DOB |
+------------+
| 1999-04-12 |
| 2010-12-01 |
| 2015-03-09 |
| 2007-05-24 |
+------------+
4 rows in set (0.00 sec)
4. 특정 연도로 DOB 검색하기
이제 YEAR() 함수를 활용해 yyyy-mm-dd 형식의 DOB 값 중 2015년에 해당하는 레코드만 조회하는 쿼리입니다.
mysql> select * from DemoTable1322 where year(DOB)='2015';
실행 결과:
+------------+
| DOB |
+------------+
| 2015-03-09 |
+------------+
1 row in set (0.01 sec)
위 결과처럼 WHERE 절에서 year(DOB)='2015' 조건을 지정하면, 월·일과 상관없이 해당 연도에 속하는 레코드만 정확히 필터링됩니다.
참고: 성능 최적화 팁
컬럼에 함수를 적용하면(year(DOB)) 인덱스를 활용하지 못할 수 있습니다. 대량의 데이터를 다룰 때는 다음과 같이 범위 조건을 사용하는 것이 더 효율적입니다.
mysql> select * from DemoTable1322 where DOB >= '2015-01-01' and DOB < '2016-01-01';
이 방식은 DOB 컬럼에 생성된 인덱스를 그대로 활용할 수 있어 대용량 테이블에서 조회 성능을 크게 향상시킬 수 있습니다.