结合所学sql语句完成身份证解码
首先我们用到的是 case when sql的判断语法,提取出id_card 字段(身份证加密状态),
之后我们判断身份证长度是否大于15位,
如果是大于执行,第一个语句,首先把身份证拆开分为三段,用sql的replace()函数去替换a、b、c三个字母换成3/6/9,第二段同理,得出的结果需要减去一串数字,第三段和第一段解码逻辑一样(截取用sql的substr()函数),这是长度超过15位的解码逻辑,如果没超过就是else
CASE WHEN LENGTH(id_card)>15
THEN
CONCAT(replace(replace(replace(substr(id_card, 1, 6),'a','3'),'b','6'),'c','9'),replace(replace(replace(substr(id_card, 7, 8),'a','3'),'b','6'),'c','9')-20170719,replace(replace(replace(substr(id_card, 15,4),'a','3'),'b','6'),'c','9'))
ELSE
CONCAT(replace(replace(replace(substr(id_card, 1, 6),'a','3'),'b','6'),'c','9'),replace(replace(replace(substr(id_card, 7, 6),'a','3'),'b','6'),'c','9')-20170719,replace(replace(replace(substr(id_card, 13,2),'a','3'),'b','6'),'c','9'))
END
网友评论