2013-01-18 33 views
1

我正在使用我在這裏找到的功能,以及在互聯網上的哪個位置嘗試從字段中去除非法字符。使用PATINDEX刪除字符

Create Function [epacube].[StripSpecs](@myString varchar(500), 
    @invalidChars varchar(100)) RETURNS varchar(500) AS Begin 

    While PatIndex(@invalidChars, @myString) > 0 
     Set @myString = Stuff(@myString, PatIndex(@invalidChars, @myString), 1, '') 
    Return @myString End 
在我的表

我有我的字段的值設置爲:設定DATA_NAME = '臨$ d)UC^T'

如果我運行此查詢:

SELECT epacube.StripSpecs (
    DATA_NAME 
    ,'%$%') FROM TABLE_DATA 

它的工作原理和我)PROD的返回值UC^T

不過,如果我添加一個特殊字符,它不再起作用:

SELECT epacube.StripSpecs (
    DATA_NAME 
    ,'%$)%') FROM TABLE_DATA 

返回我的原始值臨$ d)UC^T

沒有人有完成的事情,我需要做什麼建議嗎?

編輯 按照以下這裏的答案是,工作代碼:

Create Function [epacube].[StripSpecs](@myString varchar(500), @invalidChars varchar(100)) 
RETURNS varchar(500) AS 
Begin 

    While PatIndex('%[' + @invalidChars + ']%', @myString) > 0 
    Set @myString = Stuff(@myString, PatIndex('%[' + @invalidChars + ']%', @myString), 1, '') 
    Return @myString 
End 

回答

0

LIKE,如果要指定一個的一個字符集應該匹配的,使用[]附上一套。

SELECT epacube.StripSpecs (
    DATA_NAME 
    ,'%[$)]%') FROM TABLE_DATA 

雖然,就個人而言,考慮到功能和參數的說明,我想補充的StripSpecs%[]%,讓來電者只給一組字符(如果你不希望支持任何其他類型的圖案被指定)

+0

謝謝!我曾嘗試在函數中添加%,但這不起作用,所以我想我會嘗試將它們傳入並看看它是如何工作的!感謝您的信息,現在就試試吧! – Leslie