MySQL에서 생년월일(D.O.B)로 나이 계산하기
MySQL에서 생년월일(D.O.B) 필드를 기준으로 나이를 계산하려면 현재 날짜의 연도에서 생년월일의 연도를 뺀 값을 구하는 방식을 사용할 수 있습니다. 기본적인 문법은 다음과 같습니다.
select yourColumnName1, yourColumnName2, ........N,
year(curdate()) - year(yourDOBColumnName) as anyVariableName
from yourTableName;
예제 테이블 생성
위 문법을 이해하기 위해 먼저 테이블을 생성해 보겠습니다. 테이블 생성 쿼리는 다음과 같습니다.
mysql> create table AgeDemo
-> (
-> StudentId int,
-> StudentName varchar(100),
-> StudentDOB date
-> );
Query OK, 0 rows affected (0.61 sec)
다음으로 INSERT 명령을 사용해 몇 개의 샘플 데이터를 입력합니다.
mysql> insert into AgeDemo values(1,'John','1998-10-1');
Query OK, 1 row affected (0.20 sec)
mysql> insert into AgeDemo values(2,'Carol','1990-1-2');
Query OK, 1 row affected (0.14 sec)
mysql> insert into AgeDemo values(3,'Sam','2000-12-1');
Query OK, 1 row affected (0.15 sec)
mysql> insert into AgeDemo values(4,'Mike','2010-10-11');
Query OK, 1 row affected (0.18 sec)
SELECT 문을 사용하여 테이블에 저장된 모든 레코드를 조회합니다.
mysql> select *from AgeDemo;
실행 결과는 다음과 같습니다.
+-----------+-------------+------------+
| StudentId | StudentName | StudentDOB |
+-----------+-------------+------------+
| 1 | John | 1998-10-01 |
| 2 | Carol | 1990-01-02 |
| 3 | Sam | 2000-12-01 |
| 4 | Mike | 2010-10-11 |
+-----------+-------------+------------+
4 rows in set (0.00 sec)
D.O.B로 나이 계산 쿼리 실행
이제 생년월일로 나이를 계산하는 쿼리를 실행해 보겠습니다.
mysql> select StudentName, StudentDOB,
year(curdate()) - year(StudentDOB) as StudentAge from AgeDemo;
나이가 계산되어 출력되는 결과는 다음과 같습니다.
+-------------+------------+------------+
| StudentName | StudentDOB | StudentAge |
+-------------+------------+------------+
| John | 1998-10-01 | 21 |
| Carol | 1990-01-02 | 29 |
| Sam | 2000-12-01 | 19 |
| Mike | 2010-10-11 | 9 |
+-------------+------------+------------+
4 rows in set (0.03 sec)
더 정확한 방법: TIMESTAMPDIFF 활용
year(curdate()) - year(StudentDOB) 방식은 간단하지만 한 가지 주의할 점이 있습니다. 올해 생일이 아직 지나지 않았더라도 연도 차이만으로 계산하기 때문에 실제 만 나이보다 1살 많게 나올 수 있습니다.
생일이 지났는지 여부까지 정확하게 반영하려면 MySQL의 TIMESTAMPDIFF() 함수를 사용하는 것이 좋습니다.
mysql> select StudentName, StudentDOB,
TIMESTAMPDIFF(YEAR, StudentDOB, CURDATE()) as StudentAge
from AgeDemo;
이 함수는 두 날짜 사이의 기간을 연(YEAR), 월(MONTH), 일(DAY) 등 원하는 단위로 계산해 주며, 생일이 아직 지나지 않은 경우 자동으로 조정해 주기 때문에 실제 나이와 일치하는 정확한 결과를 얻을 수 있습니다.