MySQL에서는 날짜 값으로부터 연도(YEAR)와 월(MONTH)을 추출할 때 크게 세 가지 방법을 사용할 수 있습니다. 각 방법은 상황에 따라 장단점이 있으므로, 필요한 출력 형식에 맞게 선택하면 됩니다.
1. EXTRACT() 함수 사용
연도와 월을 하나의 값으로 함께 추출하려면 EXTRACT() 함수를 사용하는 것이 가장 간단합니다. 이 함수에 YEAR_MONTH를 인자로 전달하면 연도와 월이 결합된 형태의 숫자를 반환합니다. 예제 테이블 'collegedetail'의 데이터를 기준으로 살펴보겠습니다.
mysql> Select EXTRACT(YEAR_MONTH From estb) from collegedetail; +-------------------------------+ | EXTRACT(YEAR_MONTH From estb) | +-------------------------------+ | 201005 | | 199510 | | 199409 | | 200107 | | 201007 | +-------------------------------+ 5 rows in set (0.00 sec)
결과를 보면 '201005'처럼 연도 뒤에 월이 붙은 형태(YYYYMM)로 출력되는 것을 확인할 수 있습니다. 정렬이나 그룹화 조건으로 활용하기에 적합한 형식입니다.
2. DATE_FORMAT() 함수 사용
DATE_FORMAT() 함수는 이름 그대로 출력 형식을 자유롭게 지정할 수 있다는 점이 가장 큰 장점입니다. 연도와 월을 함께 추출할 수도 있고, 각각 따로 추출할 수도 있습니다.
mysql> Select DATE_FORMAT(estb, '%Y %m') from collegedetail; +----------------------------+ | DATE_FORMAT(estb, '%Y %m') | +----------------------------+ | 2010 05 | | 1995 10 | | 1994 09 | | 2001 07 | | 2010 07 | +----------------------------+ 5 rows in set (0.00 sec)
연도만 추출하고 싶다면 %Y, 월만 추출하고 싶다면 %m 또는 %M 형식 지정자를 사용합니다.
mysql> Select DATE_FORMAT(estb, '%Y') from Collegedetail; +-------------------------+ | DATE_FORMAT(estb, '%Y') | +-------------------------+ | 2010 | | 1995 | | 1994 | | 2001 | | 2010 | +-------------------------+ 5 rows in set (0.00 sec) mysql> Select DATE_FORMAT(estb, '%m') from Collegedetail; +-------------------------+ | DATE_FORMAT(estb, '%m') | +-------------------------+ | 05 | | 10 | | 09 | | 07 | | 07 | +-------------------------+ 5 rows in set (0.00 sec)
특히 %M을 사용하면 월이 숫자가 아닌 영문 월 이름(예: May, October)으로 출력됩니다. 보고서나 화면 표시용 데이터를 만들 때 유용합니다.
mysql> Select DATE_FORMAT(estb, '%M') from Collegedetail; +-------------------------+ | DATE_FORMAT(estb, '%M') | +-------------------------+ | May | | October | | September | | July | | July | +-------------------------+ 5 rows in set (0.10 sec)
주요 형식 지정자를 정리하면 다음과 같습니다.
- %Y: 4자리 연도 (예: 2010)
- %m: 2자리 숫자 월 (예: 05)
- %M: 영문 월 이름 전체 (예: May)
3. YEAR()와 MONTH() 함수 사용
연도와 월을 별개의 컬럼으로 나누어 추출해야 한다면 YEAR() 함수와 MONTH() 함수를 각각 사용하는 것이 좋습니다. AS 키워드를 활용해 결과 컬럼에 별칭을 붙이면 가독성도 높아집니다.
mysql> Select YEAR(estb) AS 'Year', MONTH(estb) As 'MONTH' From collegedetail; +------+-------+ | Year | MONTH | +------+-------+ | 2010 | 5 | | 1995 | 10 | | 1994 | 9 | | 2001 | 7 | | 2010 | 7 | +------+-------+ 5 rows in set (0.00 sec)
이 방식은 연도별 통계, 월별 집계 등 각 값을 독립적으로 처리해야 하는 쿼리에서 특히 유용합니다.
정리
- 연도와 월을 하나의 숫자(YYYYMM)로 얻고 싶다면 → EXTRACT(YEAR_MONTH ...)
- 원하는 형식으로 포맷팅된 문자열이 필요하다면 → DATE_FORMAT()
- 연도와 월을 개별 숫자 값으로 분리해야 한다면 → YEAR(), MONTH()