MySQL에서 날짜 형식의 데이터로부터 연도만 추출하고 싶다면, 내장 함수인 YEAR() 함수를 사용하면 됩니다. 이 함수는 DATE 타입뿐만 아니라 다양한 방식으로 응용할 수 있어 매우 유용합니다.
1. 기본 사용법: YEAR() 함수
가장 간단한 방법은 YEAR() 함수에 현재 날짜를 반환하는 CURDATE() 함수를 전달하는 것입니다.
mysql> SELECT YEAR(curdate()) as OnlyYearFromCurrentDate;
실행 결과는 다음과 같습니다.
+-------------------------+ | OnlyYearFromCurrentDate | +-------------------------+ | 2018 | +-------------------------+ 1 row in set (0.00 sec)
DATE(NOW()) 함수 활용하기
같은 결과를 얻는 또 다른 방법으로, NOW() 함수의 결과에 DATE() 함수를 적용한 뒤 연도를 추출할 수도 있습니다.
mysql> SELECT YEAR(date(now())) as OnlyYearFromCurrentDate;
실행 결과는 동일하게 현재 연도를 반환합니다.
+-------------------------+ | OnlyYearFromCurrentDate | +-------------------------+ | 2018 | +-------------------------+ 1 row in set (0.00 sec)
2. VARCHAR 컬럼에서 연도 추출하기
흥미로운 점은 날짜가 아닌 VARCHAR(문자열) 타입의 컬럼에서도 연도를 추출할 수 있다는 것입니다. 이 경우 STR_TO_DATE() 함수를 함께 사용해야 합니다.
먼저 실습용 테이블을 생성해 보겠습니다.
mysql> create table ExtractYearDemo -> ( -> YourDueTime varchar(200) -> ); Query OK, 0 rows affected (1.15 sec)
INSERT 명령어를 사용하여 테이블에 데이터를 삽입합니다.
mysql> insert into ExtractYearDemo values('27-10-2011');
Query OK, 1 row affected (0.16 sec)
mysql> insert into ExtractYearDemo values('28-11-2012');
Query OK, 1 row affected (0.15 sec)
mysql> insert into ExtractYearDemo values('29-12-2018');
Query OK, 1 row affected (0.14 sec)
mysql> insert into ExtractYearDemo values('01-01-2019');
Query OK, 1 row affected (0.15 sec)SELECT 문을 사용하여 테이블의 모든 레코드를 확인해 보겠습니다.
mysql> select *from ExtractYearDemo;
실행 결과는 다음과 같습니다.
+-------------+ | YourDueTime | +-------------+ | 27-10-2011 | | 28-11-2012 | | 29-12-2018 | | 01-01-2019 | +-------------+ 4 rows in set (0.00 sec)
STR_TO_DATE()와 YEAR() 조합하기
VARCHAR 타입 컬럼에서 연도를 추출하려면, 먼저 STR_TO_DATE() 함수로 문자열을 날짜 형식으로 변환한 후 YEAR() 함수를 적용합니다. 여기서 중요한 것은 문자열의 실제 날짜 형식에 맞게 포맷 지정자(%d-%m-%Y)를 설정하는 것입니다.
mysql> select YEAR(STR_TO_DATE(yourDueTime, "%d-%m-%Y")) As OnlyYearFromDate from ExtractYearDemo;
실행 결과, 각 문자열에서 연도가 정상적으로 추출된 것을 확인할 수 있습니다.
+------------------+ | OnlyYearFromDate | +------------------+ | 2011 | | 2012 | | 2018 | | 2019 | +------------------+ 4 rows in set (0.00 sec)
정리
- DATETIME/DATE 타입:
YEAR(컬럼명)또는YEAR(CURDATE())로 바로 연도 추출 가능 - VARCHAR 타입:
STR_TO_DATE()로 먼저 날짜 변환 후YEAR()적용 - 포맷 지정자는 데이터 형식에 맞춰 설정 (
%d: 일,%m: 월,%Y: 4자리 연도)
이처럼 MySQL의 YEAR() 함수는 단독으로도, 다른 함수와 조합해서도 손쉽게 연도를 추출할 수 있는 강력한 도구입니다.