2016-09-06 53 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 

修改正则表达式,只要你喜欢,如果有数字,以资本字符等字符串,