0

我正在使用以下功能来清理电话号码字段:

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

我将如何修改上面的模式,以便将+符号视为可接受的字符(对于国际号码)?

谢谢

4

1 回答 1

0

使用 '%[^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
于 2013-03-27T05:49:42.433 回答