在工作中经常要导入电子表格到数据库中对比分析,在导入身份证号码时往往会导入隐藏字符,看着是18位,实质是19位身份证号码,导致对比时数据出错,如图:

分析身份证号码中只能出现数字与字符,因此简单的办法是过滤掉其他字符即可,在网上找了一下,有现成的Sql函数可以使用,如下:
--删除非字符
-- '%[^a-z]%'
CREATE Function [dbo].[RemoveNonAlphaCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^a-z]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^a-z]%', @Temp), 1, '')
Return @TEmp
End
--删除非数字、字符
-- '%[^a-z0-9]%'
CREATE Function [dbo].[RemoveNonAlphaNumericCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^a-z0-9]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^a-z0-9]%', @Temp), 1, '')
Return @Temp
End
--删除非数字
-- '%[^0-9]%'
CREATE Function [dbo].[RemoveNonNumericCharacters](@Temp VarChar(1000))
Returns VarChar(1000)
AS
Begin
While PatIndex('%[^0-9]%', @Temp) > 0
Set @Temp = Stuff(@Temp, PatIndex('%[^0-9]%', @Temp), 1, '')
Return @TEmp
End
用法:
UPDATE dddddd SET [5] = dbo.RemoveNonAlphaNumericCharacters([5]) WHERE LEN([5]) = 19--dbo.必须输入
转至:https://www.cnblogs.com/litsword/archive/2013/04/04/2998954.html
这篇效果相同:https://www.cnblogs.com/zhaowei303/articles/5462093.html