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)
留着以后用到了好找。