假設我有以下的正則表達式模式:SQL刪除不在正則表達式模式字符
%[a-zA-Z0-9+&@#\/%=~_|$?!-:,.']%
我怎麼會通過字符串的字符進行迭代,並刪除(或用空白代替)的任何字符不符合模式?
假設我有以下的正則表達式模式:SQL刪除不在正則表達式模式字符
%[a-zA-Z0-9+&@#\/%=~_|$?!-:,.']%
我怎麼會通過字符串的字符進行迭代,並刪除(或用空白代替)的任何字符不符合模式?
此:
PatIndex('%[^a-zA-Z0-9+&@#\/%=~_|$?!-:,.']%', YourValue)
將返回與模式匹配在該字符。在這種情況下,我已將^
添加到開頭,以便模式匹配字符集中的所有而不是。
然後,您可以刪除該位置處的字符,並繼續或替換整個字符串中找到的字符的所有匹配項。
FYI:模擬,以搜索開始在某個字符位置,你可以使用Substring
得到的字符串(甚至是一個字符)的一部分,並使用對PatIndex
的CharIndex
的offset
參數。
由於ErikE在他的回答中提到,PATINDEX
方法是你所需要的,它是SLOW不過。
關於SO的一個非常類似的問題的答案是stackoverflow.com/a/23001916/4316831。下面的代碼從那裏被送往:
DECLARE @counter int
SET @counter = 0
WHILE(@counter < (SELECT MAX(ID_COLUMN) FROM Table))
BEGIN
WHILE 1 = 1
BEGIN
DECLARE @RetVal varchar(50)
SET @RetVal = (SELECT Column = STUFF(Column, PATINDEX('%[^0-9.]%', Column),1, '')
FROM Table
WHERE ID_COLUMN = @counter)
IF(@RetVal IS NOT NULL)
UPDATE Table SET
Column = @RetVal
WHERE ID_COLUMN = @counter
ELSE
break
END
SET @counter = @counter + 1
END
好吧基於ErikE的幫助下,我做了以下功能
CREATE FUNCTION dbo.RemoveInvalidCharacters
(
@pattern as varchar(max),
@string as varchar(max)
)
RETURNS varchar(MAX)
AS
BEGIN
WHILE PatIndex(@pattern,@string) >0
BEGIN
SET @string=REPLACE(@string,SUBSTRING(@string,PatIndex(@pattern,@string),1),'')
END
RETURN @String
END
GO
然後,所有我能做的就是調用該函數爲:
select dbo.RemoveInvalidCharacters('%[^a-zA-Z0-9+&@#\/%=~_|$?!:,.''-]%','Test€€€String^^^')
然後輸出是: TestString
同意,我已更正。享受代表 – rmon2852
所以使用這個我將不得不包裝在一個while循環來考慮sce nario哪裏有一個以上的無效字符可以在字符串中正確? – rmon2852
正確。沒有辦法獲得某種與模式不匹配的字符列表的地圖。你一次能找出一個。 – ErikE