Hive 根據身份證規則從身份證號提取年齡和性別
阿新 • • 發佈:2019-02-11
身份證號的規則不再贅述,需要注意目前一些老資料還是存在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