2013-03-27 49 views
0

我使用下面的函數來消毒電話號碼字段:SQL服務器 - 爲模式匹配的數字僅加號

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 

我將如何修改上面的圖案,這樣它會考慮到+符號是可接受的字符(國際號碼)?

Thankyou

回答

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