주민등록 번호로 나이를 구하고 몇세 이상, 몇세 이하 조건을 주고싶습니다. 0 4 4,433

by 신입사원 [SQL Query] [2016.01.20 10:46:48]


select TRUNC((sysdate-to_date(19 || 주민번호 앞자리,'YYYYMMDD'))/365) 나이1, 

from dual

where TRUNC((sysdate-to_date(19 || 주민번호 앞자리,'YYYYMMDD'))/365)>=10

이런 쿼리문에서 나이를 10세 이상, 30세 미만인 사람만 조회하는 조건을 어떤식으로 줘야하나요?

ex) 19 || 주민번호 앞자리 이 부분을 컬럼명으로 바꿔넣으면 

ORA-01843: 지정한 월이 부적합합니다. 라는 오류메세지가 팝업됩니다.

 

by terry0515 [2016.01.20 10:50:47]

오라클은 안해봐서 모르겠지만..

 

TRUNC((sysdate-to_date(19 || 주민번호 앞자리,'YYYYMMDD'))/365)

상기 구문이 나이를 구하는 건가요?

맞다는 가정하에서

 

Select 필요컬럼

  From 테이블

 Where TRUNC((sysdate-to_date(19 || 주민번호 앞자리,'YYYYMMDD'))/365) Between 10 And (30-1)


by 마농 [2016.01.20 11:05:49]
WITH t AS
(
SELECT '7510131******' jno FROM dual
UNION ALL SELECT '0909294******' FROM dual
UNION ALL SELECT '9903049******' FROM dual
)
SELECT jno 주민번호
     , dt  생년월일
     , FLOOR(MONTHS_BETWEEN(sysdate, TO_DATE(dt, 'yyyymmdd')) / 12) AS 만나이
  FROM (SELECT jno
             , DECODE(SUBSTR(jno, 7, 1)
               , '1', '19', '2', '19'
               , '3', '20', '4', '20'
               , '9', '18', '0', '18'
               ) || SUBSTR(jno, 1, 6) dt
          FROM t
        )
;

 


by 창조의날개 [2016.01.20 11:08:39]

SELECT TO_CHAR(SYSDATE,'YYYY')
    - (SUBSTR(주민번호앞자리,1,2)
       + DECODE(SUBSTR((주민번호뒷자리,1,1)),'1','1900','2','1900','2000')) AS 나이
FROM DUAL
WHERE TO_CHAR(SYSDATE,'YYYY')
      - (SUBSTR(주민번호앞자리,1,2)
         + DECODE(SUBSTR((주민번호뒷자리,1,1)),'1','1900','2','1900','2000'))
      BETWEEN 10 AND (30-1)
;

주민번호 뒷자리도 있어야 겠네요..

뒷자리 첫글자가 1이나 2이면 1900년대 사람이고 그렇지 않으면 2000년대 사람이겠네요..

 

그리고 우리나라 나이 기준으로 한다면 계산값에 1을 더해 줘서 계산해야 겠네요..

 


by 신입사원 [2016.01.20 13:00:51]

감사합니다. 큰 도움이 됬어요!

댓글등록
SQL문을 포맷에 맞게(깔끔하게) 등록하려면 code() 버튼을 클릭하여 작성 하시면 됩니다.
로그인 사용자만 댓글을 작성 할 수 있습니다. 로그인, 회원가입