본문 바로가기
SQL

[Oracle] SQL 주민등록번호로 나이 계산하기

by Queen2 2022. 9. 8.
728x90
반응형

처음 이 문제를 접했을 때, 현재 연도 - 출생연도의 포맷을 생각했지만 어떻게 표현해야 할지 약간 헤맸었다.

스스로 푼 방법과 다른 웹사이트를 참고해서 크게 3가지의 해결책을 찾았다.

 

JUMIN : 주민등록번호 컬럼

주민번호의 구성을 생각해보면 총 13자리가 앞 6자리 + 뒤 7자리로 구성되어 있다

출생연도 뒷자리(2자리) + 출생월(2자리) + 출생일(2자리) + '-' + '성별을 구분하는 숫자' (1자리)+ (나머지 6자리)

 


1. 현재 연도 - 문자열이나 컬럼을 합쳐주는 '||' 를 이용해 '19' + 출생연도 뒷자리 붙이기

TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) - TO_NUMBER("19" || SUBSTR(JUMIN,1,2))

 

2. 현재 연도 - 숫자1900을 숫자 변환된 출생연도 뒷자리 더하기

TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) - (1900+TO_NUMBER(SUBSTR(JUMIN,1,2))

 

3. 7번째 자리 기반 출생연도를 활용한 CASE WHEN 구문

이건 이번에 찾아보면서 알게된 사실인데 성별을 구분하는 숫자 7번째 자리가 출생연대에 따라 다르다고 합니다!

 

  • 9: 1800 ~ 1899년에 태어난 남성
  • 0: 1800 ~ 1899년에 태어난 여성
  • 1: 1900 ~ 1999년에 태어난 남성
  • 2: 1900 ~ 1999년에 태어난 여성
  • 3: 2000 ~ 2099년에 태어난 남성
  • 4: 2000 ~ 2099년에 태어난 여성
  • 5: 1900 ~ 1999년에 태어난 외국인 남성
  • 6: 1900 ~ 1999년에 태어난 외국인 여성
  • 7: 2000 ~ 2099년에 태어난 외국인 남성
  • 8: 2000 ~ 2099년에 태어난 외국인 여성

출처: https://taisou.tistory.com/470 [Release Center:티스토리]

(어떤 분이 잘 정리해주셔서 자료를 가지고 왔습니다 ㅎㅎ)

--> 즉, 7번째 자리가 0,9인 분들은 1800년대생, 1,2,5,6은 1900년대생, 3,4,7,8은 2000년대생이라는 거죠! 

 

TO_NUMBER(TO_CHAR(SYSDATE,'YYYY')) - TO_NUMBER(CASE WHEN SUBSTR(JUMIN,7,1) IN ('1','2','5','6') THEN '19'
WHEN SUBSTR(JUMIN,7,1) IN ('3','4','7','8') THEN '20' END SUBSTR(JUMIN,1,2)

(1800년대생은 굳이 표기할 이유가 없기 때문에 제외했습니다)

CASE WHEN구문을 통해 각 번호가 해당하는게 1900년대인지 2000년대인지 구분했죠

728x90
반응형

댓글