반응형
프로젝트를 하다보면 종종 나이를 계산하는 경우가 생깁니다.
보통은 현재일자에서 태어난 일자를 뺀 값으로 나이를 구하지만, 간혹 데이터상으로 생일데이터가 없고 주민번호가 있는 경우가 있습니다
이 주민번호는 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
반응형