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