数据查询中身份证号的微妙

09.04.2015  10:55


最近笔者在参加某县级农村危房改造资金专项审计过程中,通过核对县级城乡建设局全国扩大农村危房改造试点农户档案管理信息系统中某乡镇申请人员基本情况与县级财政局资金发放的相关数据对比,筛查“享受补助人员不是申请指标人员的情况。

  审计思路:以身份证号为关键字,将补助资金清册表与申请人员基本情况表进行比对,查询出超范围享受补助的情况。

  SQL语句:

  select * from    dbo.镇补助资金清册表

            where  身份证号  not in (

                  select distinct  身份证号  from dbo.镇申请人员基本情况)

通过系统筛选,疑点人数却是 所有申请人员 ,笔者产生疑惑,于是在补助资金清册表中任选若干身份证号码在申请人员基本情况表中查询是否存在,经过几次查找,申请人员基本情况表中有补助资金表的身份证号码,这也就说明系统筛查的结果没有达到查询出超范围享受补助要求。

问题集中在了 身份证号码 上,通过

select len(身份证号) from dbo.镇申请人员基本情况

select len(身份证号) from dbo.镇补助资金清册表

查出申请人员基本情况表的身份证号都是19位,而不是正常的18位或者15位,但是身份证号在excel表格上显示正常,未出现左右空格或者异常字符,笔者反复尝试几次不成功,由于excel表格上身份证号一列很窄,却完全显示身份证号码,笔者猜测可能是县级城乡建设局相关人员在输入 身份证号码 前加半角“'”,导致申请人员基本情况表的身份证号多出一位,从18位变成 19位,笔者又通过

select * from dbo.镇补助资金清册表

              where 身份证号  not in

          (select distinct SUBSTRING( 身份证号,2,18 )

from dbo.镇申请人员基本情况)

通过SUBSTRING()语句去除身份证号前面的半角“'”,将身份证号“回归”正常18位,成功筛选出超范围享受补助人员。

小小身份证号码,在审计中字符格式,或者字符前后空格,掺杂字符的异常字符,都是不可小觑的,我们在导入数据中需要通过SQL语句改成正常格式,这样才能严谨高效地达到计算机审计目的。