1. 程式人生 > >Hive 根據身份證規則從身份證號提取年齡和性別

Hive 根據身份證規則從身份證號提取年齡和性別

身份證號的規則不再贅述,需要注意目前一些老資料還是存在15位的身份證號,程式碼如下:

  select id_no,   id_no,
  case when length(id_no) = 18 then
           floor(datediff( from_unixtime(unix_timestamp(),'yyyy-MM-dd'), 
                      concat_ws('-',substr(id_no,7,4),substr(id_no,11,2),
                                substr(id_no,13,2)
                                ) 
                     )/365 )
      when length(id_no) = 15 then 
           floor(datediff( from_unixtime(unix_timestamp(),'yyyy-MM-dd'),
                     concat('19',substr(id_no,7,2),
                            '-', substr(id_no,9,2),
                            '-', substr(id_no,11,2)
                            ) 
                    )/365 ) 
      else null end  as age,
  case when length(id_no) = 18 then
            case when substr(id_no,17,1)%2 = 0 then 'F' 
                 when substr(id_no,17,1)%2 <> 0 then 'M'
                 else null end
       when length(id_no) = 15 then 
            case when substr(id_no,15)%2 = 0 then 'F' 
                 when substr(id_no,15)%2 <> 0 then 'M'
                 else null end 
       else null end  as sex
 from xx