MySQL에서 생년월일(Date of Birth) 데이터를 기반으로 현재 나이를 계산해야 하는 경우가 자주 있습니다. 이때 YEAR() 함수와 RIGHT() 함수를 조합하면 간단하게 나이를 구할 수 있습니다. 기본적인 문법은 다음과 같습니다.
SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(yourColumnName) - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(yourColumnName, 5)) as anyVariableName from yourTableName;
이 쿼리의 핵심 원리는 다음과 같습니다. 먼저 현재 연도에서 출생 연도를 빼서 기본 나이를 구하고, 올해 생일이 아직 지나지 않았다면 1을 추가로 빼주는 방식입니다. RIGHT(CURRENT_TIMESTAMP, 5)는 현재 날짜의 '월-일' 부분을, RIGHT(yourColumnName, 5)는 생년월일의 '월-일' 부분을 추출하여 비교합니다.
예제 테이블 생성하기
개념을 제대로 이해하기 위해 실습용 테이블을 만들어 보겠습니다. 아래는 테이블 생성 쿼리입니다.
mysql> create table AgeCalculatesDemo -> ( -> YourDateOfBirth datetime -> ); Query OK, 0 rows affected (0.50 sec)
테이블이 정상적으로 생성되었습니다. 이제 INSERT 명령어를 사용해 생년월일 데이터를 몇 개 입력하겠습니다. date_add() 함수를 활용하면 현재 시점을 기준으로 특정 연수만큼 과거의 날짜를 손쉽게 만들 수 있습니다.
mysql> insert into AgeCalculatesDemo values(date_add(now(),interval -22 year));
Query OK, 1 row affected (0.16 sec)
mysql> insert into AgeCalculatesDemo values(date_add(now(),interval -12 year));
Query OK, 1 row affected (0.18 sec)
mysql> insert into AgeCalculatesDemo values(date_add(now(),interval -19 year));
Query OK, 1 row affected (0.15 sec)
mysql> insert into AgeCalculatesDemo values('2010-4-05');
Query OK, 1 row affected (0.25 sec)저장된 데이터 확인하기
입력한 모든 레코드를 SELECT 문으로 조회해 보겠습니다.
mysql> select *from AgeCalculatesDemo;
실행 결과는 다음과 같습니다.
+---------------------+ | YourDateOfBirth | +---------------------+ | 1996-12-06 23:35:26 | | 2006-12-06 23:35:32 | | 1999-12-06 23:35:42 | | 2010-04-05 00:00:00 | +---------------------+ 4 rows in set (0.00 sec)
나이 계산 쿼리 실행하기
이제 앞서 소개한 문법을 적용하여 각 생년월일에 대한 나이를 계산하는 쿼리를 실행해 보겠습니다.
mysql> SELECT YEAR(CURRENT_TIMESTAMP) - YEAR(YourDateOfBirth) -> - (RIGHT(CURRENT_TIMESTAMP, 5) < RIGHT(YourDateOfBirth, 5)) as YourAge -> from AgeCalculatesDemo;
실행 결과, 각 레코드의 나이가 정상적으로 출력됩니다.
+---------+ | YourAge | +---------+ | 22 | | 12 | | 19 | | 8 | +---------+ 4 rows in set (0.00 sec)
추가 팁: TIMESTAMPDIFF 함수 활용하기
MySQL 5.6 이상 버전에서는 TIMESTAMPDIFF() 함수를 사용하는 것이 더 간결하고 직관적입니다.
SELECT TIMESTAMPDIFF(YEAR, YourDateOfBirth, CURDATE()) as YourAge from AgeCalculatesDemo;
이 함수는 두 날짜 사이의 차이를 지정한 단위(YEAR, MONTH, DAY 등)로 반환하며, 생일이 지나지 않은 경우를 자동으로 처리해 주기 때문에 별도의 보정 로직이 필요 없습니다. 실무에서는 코드 가독성과 유지보수성을 고려할 때 TIMESTAMPDIFF() 사용을 권장합니다.