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

  • 相关阅读:
    iOS开发——高级篇——iOS中常见的设计模式(MVC/单例/委托/观察者)
    object_getClassName swift得到类名
    UIGestureRecognizerDelegate设置响应事件优先级
    String to Double in swift
    Unable to boot device in current state:Booted
    xcode Indexing | Loading index...
    swift String to UTF8编码
    进入沙盒目录
    swift objective-c混编操作
    storyboard plain style unsupported in a navigation item
  • 原文地址:https://www.cnblogs.com/edzjx/p/1442820.html
Copyright © 2011-2022 走看看