2016-09-06 56 views
2

我需要一個SQL函數或查詢,可以從字符串中轉義'\'(反斜槓),但只有奇數個'\'(反斜槓)。如何在SQL Server中逃脫特許?

例如:

DECLARE @str nvarchar(max) ='abc\df\\gh\\\eg\\\\yu' 

我現在用的是SQL Replace功能轉義反斜線(\)是這樣的:

@str = Replace(@str,'\','\\') 

但問題是它會替換子的偶數字符串。但我只需要它應該從字符串中只替換具有'\'的偶數個子字符串。

+0

待辦事項你有一個示例輸出? – Steven

回答

2

這樣的事情會起作用。首先,用數據中不存在的某些字符替換雙斜槓組。我選擇了克拉,但你可以選擇任何其他可行的角色。然後用雙精度替換斜槓,最後將臨時字符替換爲雙斜槓。

select replace(replace(Replace(@str,'\\','^'), '\', '\\'), '^', '\\') 
1

你可以做多的替代對象:

SET @str = replace(replace(replace(@str, '\\', '~~~'), '\', '\\'), '~~~', '\\') 

這假定'~~~'不會在字符串中出現。

+0

謝謝...它的工作。 – GreenSoft

0

您可以使用正則表達式+ +的東西PATINDEX如下得到這個:

declare @str nvarchar(max) = 'abc\df\gh\\eg\\\y\u' 
declare @i int = 1 
--select @str 
while 1=1 
begin 
    SET @i = patindex('%[a-z]\[a-z]%', @str) 
    if @i <= 0 break  
    set @str = stuff(@str,@i+1, 1, '\\') 
    --print @i 
    --print @str 
end 

select @str 

修改正則表達式,只要你喜歡,如果有數字,以資本字符等字符串,