zoukankan      html  css  js  c++  java
  • 比对不同位数身份证号的SQL问题

    今天碰到的问题,人口库,与需要比对库的身份证号码都存在这样的问题:
    记录里面有些记录身份证号码15位,有些是18位的。

    这给比对带来了麻烦,最好的办法就是更新成为统一的,因为15变18可能是人工填写,容易错,最好都改成15位的。
    我不想通过update统一修改库里的数据,这是自己给自己找的麻烦,怎么弄呢。
    SQL毕竟不是程序语言,所以不能在where子句里进行——是否15位不是改成15,再判断——这样的法子。最后找了一个折中的办法。

    先比对需要对比库的表里15的,再比对它里面的18位的。人口库通过in(select case when)的方式统一改成15 位。

    select * from
    (

    SELECT dbo.[Sheet].
    *
    FROM dbo.[Sheet]
    where
        len(dbo.[Sheet].[身份证号码])
    >15 
    and 
        (left(dbo.[Sheet].[身份证号码],
    6)+substring(dbo.[Sheet].[身份证号码],9,9)) 
    in 
    (select 
    case
        when 
            len([Col007])
    >15 
        then 
            (left([Col007],
    6)+substring([Col007],9,9))
        
    else
            [Col007]
        end 
            
    as 身份证号码
        from dbo.[
    2009-04-21]
    )

    union

    SELECT dbo.[Sheet].
    *
    FROM dbo.[Sheet]
    where
        len(dbo.[Sheet].[身份证号码])
    =15 
    and 
        dbo.[Sheet].[身份证号码]
    in 
    (select 
    case
        when 
            len([Col007])
    >15 
        then 
            (left([Col007],
    6)+substring([Col007],9,9))
        
    else
            [Col007]
        end 
            
    as 身份证号码
        from dbo.[
    2009-04-21]
    )
    )
    as T

    效果还行,就是速度不是很快,2W在30W里比对,3秒不知道算不算慢。

  • 相关阅读:
    Service与Activity通信 回调方式***
    WeakReference 在android中的应用
    解决用官方容器启动redmine无法插入中文字符的问题
    Python 使用scapy 时报:ImportError: cannot import name 'NPCAP_PATH' 解决
    python3 图片文字识别
    python3 读取dbf文件报错 UnicodeDecodeError: 'gbk' codec can't decode
    RbbitMQ消息队列及python实现
    windows10创建ftp服务器
    什么是ip代理
    Python3爬虫实例 代理的使用
  • 原文地址:https://www.cnblogs.com/edzjx/p/1442820.html
Copyright © 2011-2022 走看看