개요
MySQL에서 직원의 나이를 계산하려면 DATEDIFF() 함수를 활용할 수 있습니다. 이 함수는 두 날짜 사이의 일수 차이를 반환하므로, 현재 날짜(SYSDATE())와 생년월일(DOB)의 차이를 365로 나누면 연 단위의 나이를 구할 수 있습니다.
이 개념을 이해하기 위해 다음과 같은 데이터를 가진 'emp_tbl' 테이블을 사용해 보겠습니다.
예시 테이블 데이터
mysql> Select * from emp_tbl;
+--------+------------+
| Name | DOB |
+--------+------------+
| Gaurav | 1984-01-17 |
| Gaurav | 1990-01-17 |
| Rahul | 1980-05-22 |
| Gurdas | 1981-05-25 |
| Naveen | 1991-04-25 |
| Sohan | 1987-12-26 |
+--------+------------+
6 rows in set (0.00 sec)
위 테이블에는 총 6명의 직원 데이터가 있으며, 'Gaurav'라는 이름의 직원은 서로 다른 생년월일로 두 번 등록되어 있습니다. 이처럼 이름이 중복되더라도 고유한 생년월일을 기준으로 각 레코드를 구분할 수 있습니다.
30세 이상 직원 조회 쿼리
다음 쿼리는 DATEDIFF() 함수로 계산한 나이가 30보다 큰 직원만 필터링하여 이름, 현재 날짜, 생년월일, 계산된 나이를 함께 출력합니다.
mysql> SELECT Name, SYSDATE(), DOB, DATEDIFF(SYSDATE(), DOB)/365 AS AGE
-> FROM emp_tbl
-> WHERE (DATEDIFF(SYSDATE(), DOB)/365) > 30;
+--------+---------------------+------------+---------+
| Name | SYSDATE() | DOB | AGE |
+--------+---------------------+------------+---------+
| Gaurav | 2017-12-26 22:33:24 | 1984-01-17 | 33.9644 |
| Rahul | 2017-12-26 22:33:24 | 1980-05-22 | 37.6219 |
| Gurdas | 2017-12-26 22:33:24 | 1981-05-25 | 36.6137 |
| Sohan | 2017-12-26 22:33:24 | 1987-12-26 | 30.0219 |
+--------+---------------------+------------+---------+
4 rows in set (0.10 sec)
쿼리 동작 방식
- SYSDATE(): 쿼리가 실행되는 시점의 현재 날짜와 시간을 반환합니다.
- DATEDIFF(SYSDATE(), DOB): 현재 날짜에서 생년월일을 뺀 일수를 계산합니다.
- /365: 일수를 연 단위 나이 값으로 변환합니다.
- WHERE 절: 계산된 나이가 30보다 큰 행만 결과로 반환합니다.
결과를 살펴보면 1990년생 Gaurav와 1991년생 Naveen은 나이가 30세 이하이므로 결과에서 제외된 것을 확인할 수 있습니다. 반면 1984년생 Gaurav는 같은 이름의 다른 레코드와 별개로, 자신의 고유한 생년월일을 기준으로 정확히 계산되어 결과에 포함됩니다.