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

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

데이터베이스 작업을 하다 보면 생년월일 정보를 바탕으로 현재 나이를 계산해야 하는 경우가 자주 발생합니다. MySQL에서는 여러 날짜 함수를 조합하여 간단하게 나이를 구할 수 있습니다. 이 글에서는 그 방법을 단계별로 살펴보겠습니다.

1단계: 생년월일을 사용자 변수에 저장하기

먼저 SET 문을 사용하여 생년월일 값을 사용자 변수에 저장합니다.

mysql> SET @dob = '1984-01-17';
Query OK, 0 rows affected (0.00 sec)

위 쿼리는 '1984-01-17'이라는 생년월일 값을 @dob 변수에 할당합니다. 이렇게 변수에 값을 담아두면 이후 쿼리에서 반복적으로 활용할 수 있습니다.

2단계: 날짜 함수 조합으로 나이 계산하기

변수가 준비되었다면, 아래의 공식을 적용하여 나이(만 연도 기준)를 계산할 수 있습니다.

mysql> SELECT DATE_FORMAT(FROM_DAYS(TO_DAYS(CURDATE()) - TO_DAYS(@dob)), '%Y') + 0 AS 'Age in years';
+---------------+
| Age in years  |
+---------------+
|            33 |
+---------------+
1 row in set (0.00 sec)

계산 원리 살펴보기

이 공식이 어떻게 동작하는지 각 함수의 역할을 나누어 설명하면 다음과 같습니다.

  • TO_DAYS(): 날짜를 서기 0년부터 경과한 일(day) 수로 변환합니다. 현재 날짜와 생년월일을 각각 일 수로 바꾸는 데 사용됩니다.
  • 두 일 수의 차: 현재 날짜에서 생년월일을 빼면, 해당 사람이 살아온 총 일수가 됩니다.
  • FROM_DAYS(): 일 수를 다시 날짜 형식으로 되돌립니다. 결과값의 연도 부분이 곧 나이가 됩니다.
  • DATE_FORMAT(..., '%Y'): 날짜에서 연도 부분만 문자열로 추출합니다.
  • + 0: 추출된 문자열을 숫자로 변환하여 정렬이나 산술 연산에 문제없이 사용할 수 있게 합니다.

더 간단한 대안: TIMESTAMPDIFF 함수

MySQL 5.0.12 이상 버전을 사용한다면 TIMESTAMPDIFF() 함수를 활용하는 것이 더 직관적입니다.

mysql> SELECT TIMESTAMPDIFF(YEAR, @dob, CURDATE()) AS 'Age in years';
+---------------+
| Age in years  |
+---------------+
|            33 |
+---------------+
1 row in set (0.00 sec)

TIMESTAMPDIFF(YEAR, 시작날짜, 끝날짜)는 두 날짜 사이의 차이를 지정한 단위(여기서는 YEAR)로 반환하므로, 코드가 훨씬 읽기 쉽고 유지보수도 간편합니다.

마무리

정리하자면, MySQL에서 생년월일로 나이를 계산하는 대표적인 방법은 두 가지입니다. 첫째는 TO_DAYS, FROM_DAYS, DATE_FORMAT을 조합하는 전통적인 방식이고, 둘째는 TIMESTAMPDIFF 함수를 사용하는 더 간결한 현대적인 방식입니다. 실무에서는 가독성과 정확성 면에서 TIMESTAMPDIFF 사용을 권장하지만, 두 방식 모두 상황에 맞게 활용할 수 있습니다.