데이터베이스에서 회원 관리나 통계 작업을 하다 보면 생년월일(DOB)을 기준으로 나이를 계산해야 하는 경우가 자주 발생합니다. MySQL에서는 TIMESTAMPDIFF() 함수를 사용하면 복잡한 연산 없이 간단하게 나이를 구할 수 있습니다.
기본 문법
select timestampdiff(YEAR,yourColumnName,now()) AS anyAliasName from yourTableName;
timestampdiff(YEAR, ...)는 두 날짜 사이의 차이를 '연도' 단위로 반환합니다. 시작 날짜에는 생년월일 컬럼을, 종료 날짜에는 현재 시간을 나타내는 now()를 넣어주면 됩니다.
1. 예제 테이블 생성
먼저 학생 생년월일을 저장할 테이블을 만들어 보겠습니다.
mysql> create table DemoTable
(
StudentId int NOT NULL AUTO_INCREMENT PRIMARY KEY,
StudentDOB datetime
);
Query OK, 0 rows affected (0.61 sec)2. 샘플 데이터 삽입
insert 명령을 사용해 테이블에 몇 개의 레코드를 입력합니다.
mysql> insert into DemoTable(StudentDOB) values('1996-01-12');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(StudentDOB) values('1990-12-31');
Query OK, 1 row affected (0.12 sec)
mysql> insert into DemoTable(StudentDOB) values('1989-04-01');
Query OK, 1 row affected (0.45 sec)
mysql> insert into DemoTable(StudentDOB) values('2000-06-17');
Query OK, 1 row affected (0.16 sec)3. 저장된 데이터 확인
select 문으로 테이블의 전체 레코드를 조회해 보겠습니다.
mysql> select *from DemoTable;
실행 결과는 다음과 같습니다.
+-----------+---------------------+ | StudentId | StudentDOB | +-----------+---------------------+ | 1 | 1996-01-12 00:00:00 | | 2 | 1990-12-31 00:00:00 | | 3 | 1989-04-01 00:00:00 | | 4 | 2000-06-17 00:00:00 | +-----------+---------------------+ 4 rows in set (0.00 sec)
4. TIMESTAMPDIFF로 나이 계산하기
이제 생년월일로부터 나이를 계산하는 실제 쿼리입니다.
mysql> select timestampdiff(YEAR,StudentDOB,now()) AS AGE from DemoTable;
실행 결과:
+------+ | AGE | +------+ | 23 | | 28 | | 30 | | 18 | +------+ 4 rows in set (0.03 sec)
참고 사항
TIMESTAMPDIFF 함수는 단순히 연도 숫자의 차이만 계산하는 것이 아니라, 해당 연도의 생일이 지났는지 여부까지 반영합니다. 따라서 생일이 아직 지나지 않은 경우 자동으로 1살을 빼서 만 나이 기준의 정확한 값을 반환합니다. 또한 YEAR 외에도 MONTH, DAY, HOUR, MINUTE 등 다양한 단위를 지정할 수 있어 두 날짜 간의 간격을 계산하는 폭넓은 용도로 활용할 수 있습니다.