오라클 쿼리에서 만 나이를 구하는 쿼리가 필요하여 구상을 하였다.
만 나이의 기준이 우선 필요한데...
만 나이는 현재 년도에서 본인의 주민등록상의 출생년도를 빼면되고, 생일이 지나지 않았다면 1을 추가적으로 빼주면 본인의 만 나이가 되는 것이다.
그 예의 쿼리를 아래와 같이 작성을 하였으니 나중에 필요하면 다시 찾아보도록 하자.
select '2009' now_date, jumin1 ||'-'|| jumin2,
( to_number('2009') -
to_number(decode(substr(jumin2,1,1),'1','19','2','19','3','20','4','20')||substr(jumin1,1,2))
- ( case when substr(jumin1, 3, 4) < to_number('0105') then 1 else 0 end )
) age
from (
select '881212' jumin1, '1123456' jumin2 from dual
union
select '891201' jumin1, '2123456' jumin2 from dual
union
select '000104' jumin1, '3123456' jumin2 from dual
union
select '020104' jumin1, '4123456' jumin2 from dual
union
select '290106' jumin1, '1123456' jumin2 from dual
union
select '300105' jumin1, '1123456' jumin2 from dual
)
order by jumin1
위의 쿼리에서 to_number('0105') 부분의 날짜를 바꾸어 가면서 테스트하면 생일이 지난 여부에 따라 나이가 달라짐을 볼 수 있다.
추가적으로 현재 시스템의 날짜를 기준으로 한다면 to_number('2009')를 to_number(to_char(sysdate, 'YYYY')) 이런식으로 하면된다.
만 나이의 기준이 우선 필요한데...
만 나이는 현재 년도에서 본인의 주민등록상의 출생년도를 빼면되고, 생일이 지나지 않았다면 1을 추가적으로 빼주면 본인의 만 나이가 되는 것이다.
그 예의 쿼리를 아래와 같이 작성을 하였으니 나중에 필요하면 다시 찾아보도록 하자.
select '2009' now_date, jumin1 ||'-'|| jumin2,
( to_number('2009') -
to_number(decode(substr(jumin2,1,1),'1','19','2','19','3','20','4','20')||substr(jumin1,1,2))
- ( case when substr(jumin1, 3, 4) < to_number('0105') then 1 else 0 end )
) age
from (
select '881212' jumin1, '1123456' jumin2 from dual
union
select '891201' jumin1, '2123456' jumin2 from dual
union
select '000104' jumin1, '3123456' jumin2 from dual
union
select '020104' jumin1, '4123456' jumin2 from dual
union
select '290106' jumin1, '1123456' jumin2 from dual
union
select '300105' jumin1, '1123456' jumin2 from dual
)
order by jumin1
위의 쿼리에서 to_number('0105') 부분의 날짜를 바꾸어 가면서 테스트하면 생일이 지난 여부에 따라 나이가 달라짐을 볼 수 있다.
추가적으로 현재 시스템의 날짜를 기준으로 한다면 to_number('2009')를 to_number(to_char(sysdate, 'YYYY')) 이런식으로 하면된다.