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秒不知道算不算慢。

  • 相关阅读:
    线程池、进程池(concurrent.futures模块)和协程
    python中socket、进程、线程、协程、池的创建方式和应用场景
    IO多路复用和local概念
    pymysql模块
    HTML初识
    CSS之选择器
    CSS之样式属性(背景固定、圆形头像、模态框)
    字符串格式的方法%s、format和python3.6新特性f-string和类型注解
    common-pool2 使用
    apache-common pool的使用
  • 原文地址:https://www.cnblogs.com/edzjx/p/1442820.html
Copyright © 2011-2022 走看看