개발팁2016. 7. 17. 13:48

만나이는 년도로 나이를 계산후에, 생일이 안지났으면 1을 빼주면되는, 간단한 공식이다.

 

테이블 컬럼에 생년월일 컬럼이 있다면, 더 심플하게 구현이 가능하고,
음력생일 이라면, 양력생일로 변환후에 위의 로직으로 하면된다.


음력을 양력으로 변환하는 것은, DB에서 처리할때는 음/양 맵핑 테이블로 구현하는것이 빠르다.

 

여기서는 회원테이블의 주민번호로 만나이를 구할때,
매번 주민번호 읽어서, 계산을 거치는 것보다는,
computed column 을 통해서 간단히 처리하는것이 좋다.

 

회원테이블에 FullAge 라는 computed column 을 아래와 같이 추가하면 끝이다.

 

-- 만나이컬럼: 계산된 열, 주민번호로 계산한다.


 

ALTER TABLE [회원테이블] ADD FullAge as (case when RegNo is null or RegNo = '' or CHARINDEX(' ', RegNo, 1) > 0 then 0 else
   CAST( Year(GetDate()) As Integer) - Cast(SubString((Case When SubString(RegNo, 8, 1) in ('1', '2', '5', '6') Then '19' + RegNo When SubString(RegNo, 8, 1) in ('3', '4', '7', '8') Then '20' Else '18' + RegNo End),1,4) as integer)
   - (case when Right('0' + cast(Month(GetDate()) as varchar), 2) + right('0' + cast(Day(GetDate()) as varchar), 2) > substring(RegNo, 3,4) then 0 else 1 end ) -- 만나이 계산, 생일이 안지났으면 1을 빼준다.
  end )


go

 

 

 

Posted by 헝개