如果想把15位身份证号码转换成18位的身份证号码,使用SQL函数可否实现呢?答案是肯定的。下面就为您介绍使用SQL 函数转换15位身份证号码到18位的方法,供您参考。

由于二代身份证15位升为18位,很多SQL数据库中存储的数据都需要改变,下面就为您介绍使用SQL 函数转换15位身份证号码到18位的方法,供您参考,希望对您学习SQL函数的使用能够有所启示。

巧用SQL函数实现身份证15位变18位(sql语句身份证号15位升18位)  SQL 函数 转换 第1张

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('411023 850207 106')
-- /*
-- ------------------
-- 32108519760502***9
-- (所影响的行数为 1 行)
-- */
-- select dbo.f_CID15to18('321085760502***')
-- /*
-- ------------------
-- 32108519760502***9
-- (所影响的行数为 1 行)
-- */
-- drop function f_CID15to18

【编辑推荐】

教您使用SQL中的TRUNC函数

SQL中表变量是否必须替代临时表

SQL中表变量的不足

SQL循环执行while控制

SQL中游标嵌套循环的示例

转载请说明出处
知优网 » 巧用SQL函数实现身份证15位变18位(sql语句身份证号15位升18位)

发表评论

您需要后才能发表评论