身份证号 15位转换18位 SQL语句

select cert_no from jsw_user_info where len(cert_no)<18





create function f_CID15to18(@sfz char(18))

returns char(18)

as

begin 

    declare @osfz varchar(18)

    declare @i int,@ai int,@wi int,@sum int,@mod int,@result int

    set @osfz=@sfz

    set @sum=0

    IF len(@osfz)=15

    begin

      set @osfz=substring(@osfz,1,6)+'19'+substring(@osfz,7,9)

      set @i=2

        

      while @i<=18

        begin

    

        set @ai=cast(substring(@osfz,19-@i,1)as int)

        set @wi=POWER(2,(@i-1))%11

        set @sum=@sum+@ai*@wi

        set @i=@i+1

        

        end



    set @mod=@sum%11

        set @result=12-@mod



    IF @result>=10

        IF @result=10

            RETURN @osfz+'X'

        ELSE

        begin

          set @result=@result-11

          RETURN @osfz+ltrim(@result)

        end

    ELSE

        RETURN @osfz+ltrim(@result)

    end

    ELSE

        RETURN @sfz

    RETURN @sfz

    

    end

go



select dbo.f_CID15to18('110108671010545')



update jsw_user_info 

set cert_no=dbo.f_CID15to18(cert_no)

留着以后用到了好找。

你可能感兴趣的:(sql语句)