본문 바로가기

카테고리 없음

[Oracle] 주민번호로 현재 나이를 구하자

반응형

프로젝트를 하다보면 종종 나이를 계산하는 경우가 생깁니다.

보통은 현재일자에서 태어난 일자를 뺀 값으로 나이를 구하지만, 간혹 데이터상으로 생일데이터가 없고 주민번호가 있는 경우가 있습니다

이 주민번호는 1900년대 태어난 기준에서는 별문제가 없었지만.(주민번호 앞자리 2자릴 떼어다가 '19'만 붙이면 되었다.)

2000년대를 넘어서면서 그 이야기가 달라졌습니다.

 

주민등록번호 뒷자리번호의 첫번째 자리의 개념은 다음과 같습니다.

 

1: 1900 ~ 1999년에 태어난 남성

2: 1900 ~ 1999년에 태어난 여성

3: 2000 ~ 2099년에 태어난 남성

4: 2000 ~ 2099년에 태어난 여성

 

위의 기준에 따라서 나이를 구하는 구해봅니다.

 

    SELECT  TO_NUMBER(TO_CHAR(SYSDATE,'YYYY'))

                  - TO_NUMBER(TO_CHAR(CASE WHEN SUBSTR(주민번호,7,1)  IN ('1','2')  THEN '19'

                                     WHEN SUBSTR(주민번호,7,1)  IN ('3','4')  THEN '20'  END || SUBSTR(주민번호,1,2)))  AS AGE

       FROM DUAL

 

 추가로, 만나이를 구하는 쿼리는 다음과 같습니다.

 

   SELECT FLOOR(MONTHS_BETWEEN (SYSDATE, TO_DATE(생년월일,'yyyymmdd')) / 12) FROM DUAL

 

 

 

 

반응형