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

MySQL 쿼리로 생년월일(BirthDate) 열에서 나이 계산하는 방법

MySQL에서 BirthDate(생년월일) 열로 나이 계산하기

MySQL 쿼리에서 BirthDate(생년월일) 열을 활용해 나이를 구하려면 DATEDIFF() 함수를 사용하면 됩니다. DATEDIFF()는 두 날짜 사이의 일수 차이를 반환하는 함수로, 현재 날짜와 생년월일의 차이를 365.25로 나누어 대략적인 나이(연 단위)를 계산할 수 있습니다.

먼저 예제에 사용할 테이블을 생성해 보겠습니다.

mysql> create table DemoTable
(
   Id int NOT NULL AUTO_INCREMENT PRIMARY KEY,
   DateOfBirth date
);
Query OK, 0 rows affected (1.46 sec)

1. 샘플 데이터 삽입

INSERT 명령을 사용해 테이블에 몇 개의 레코드를 삽입합니다.

mysql> insert into DemoTable(DateOfBirth) values('2010-01-21');
Query OK, 1 row affected (0.14 sec)
mysql> insert into DemoTable(DateOfBirth) values('1993-04-02');
Query OK, 1 row affected (0.13 sec)
mysql> insert into DemoTable(DateOfBirth) values('1999-12-01');
Query OK, 1 row affected (1.53 sec)
mysql> insert into DemoTable(DateOfBirth) values('1998-11-16');
Query OK, 1 row affected (0.19 sec)
mysql> insert into DemoTable(DateOfBirth) values('2004-03-19');
Query OK, 1 row affected (0.11 sec)

2. 저장된 데이터 확인

SELECT 명령으로 테이블에 저장된 레코드를 조회합니다.

mysql> select *from DemoTable;

실행 결과는 다음과 같습니다.

+----+-------------+
| Id | DateOfBirth |
+----+-------------+
|  1 | 2010-01-21  |
|  2 | 1993-04-02  |
|  3 | 1999-12-01  |
|  4 | 1998-11-16  |
|  5 | 2004-03-19  |
+----+-------------+
5 rows in set (0.00 sec)

3. DATEDIFF() 함수로 나이 계산

이제 DATEDIFF() 함수를 사용해 BirthDate 열을 기준으로 나이를 구해 보겠습니다. 현재 날짜(CURDATE())와 생년월일의 차이를 365.25로 나눈 뒤, CAST(... AS UNSIGNED)로 정수형으로 변환합니다. 365.25를 사용하는 이유는 윤년까지 고려해 더 정확한 나이를 얻기 위함입니다.

mysql> select cast(DATEDIFF(curdate(),DateOfBirth) / 365.25 AS UNSIGNED) AS AGE from DemoTable;

실행 결과는 다음과 같습니다.

+------+
| AGE  |
+------+
|    9 |
|   26 |
|   19 |
|   20 |
|   15 |
+------+
5 rows in set (0.00 sec)

4. 특정 나이 범위의 데이터 조회

나이가 20세에서 26세 사이인 레코드의 ID와 생년월일(DOB)을 조회하는 쿼리는 다음과 같습니다.

mysql> SELECT *FROM DemoTable WHERE YEAR(CURDATE())-YEAR(DateOfBirth)
BETWEEN 20 AND 26;

실행 결과는 다음과 같습니다.

+----+-------------+
| Id | DateOfBirth |
+----+-------------+
|  2 | 1993-04-02  |
|  3 | 1999-12-01  |
|  4 | 1998-11-16  |
+----+-------------+
3 rows in set (0.00 sec)

참고: 위의 BETWEEN 조건 방식은 연도 값만 비교하므로, 올해 생일이 아직 지나지 않은 경우 실제 나이보다 1살 많게 계산될 수 있습니다. 만 나이 기준으로 더 정확하게 계산하려면 TIMESTAMPDIFF(YEAR, DateOfBirth, CURDATE()) 함수를 함께 활용하는 것이 좋습니다.