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

MySQL에서 생년월일로 나이 계산하는 방법 완벽 가이드

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() 사용을 권장합니다.