Sql server SQL Server-仅数字和加号的模式匹配
我正在使用以下功能清理电话号码字段:Sql server SQL Server-仅数字和加号的模式匹配,sql-server,function,design-patterns,Sql Server,Function,Design Patterns,我正在使用以下功能清理电话号码字段: CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000)) RETURNS VARCHAR(1000) AS BEGIN WHILE PATINDEX('%[^0-9]%', @strText) > 0 BEGIN SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText),
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
WHILE PATINDEX('%[^0-9]%', @strText) > 0
BEGIN
SET @strText = STUFF(@strText, PATINDEX('%[^0-9]%', @strText), 1, '')
END
RETURN @strText
END
我如何修改上面的模式,使其考虑到+
符号是可接受的字符(对于国际数字)
谢谢使用“[^0-9+]%”作为模式。但是,这将允许在数字中的任何位置使用加号。您真正应该做的是测试第一个字符是否为“+”,如果是,只需将其添加到生成的净化数字的前缀即可。以下是我的实现:
CREATE Function [fnRemoveNonNumericCharacters](@strText VARCHAR(1000))
RETURNS VARCHAR(1000)
AS
BEGIN
declare @index int
declare @hasPlus bit
set @strText = LTRIM(@strText)
if( '+' = left(@strText, 1) )
begin
set @hasPlus = 1
end
else
begin
set @hasPlus = 0
end
set @index = PATINDEX('%[^0-9]%', @strText)
WHILE @index > 0
BEGIN
SET @strText = STUFF(@strText, @index, 1, '')
set @index = PATINDEX('%[^0-9]%', @strText)
END
if( 1 = @hasPlus )
begin
set @strText = '+' + @strText
end
RETURN @strText
END