我需要一个SQL函数或查询,可以从字符串中转义'\'(反斜杠),但只有奇数个'\'(反斜杠)。如何在SQL Server中逃脱特许?
例如:
DECLARE @str nvarchar(max) ='abc\df\\gh\\\eg\\\\yu'
我现在用的是SQL Replace
功能转义反斜线(\
)是这样的:
@str = Replace(@str,'\','\\')
但问题是它会替换子的偶数字符串。但我只需要它应该从字符串中只替换具有'\'的偶数个子字符串。
我需要一个SQL函数或查询,可以从字符串中转义'\'(反斜杠),但只有奇数个'\'(反斜杠)。如何在SQL Server中逃脱特许?
例如:
DECLARE @str nvarchar(max) ='abc\df\\gh\\\eg\\\\yu'
我现在用的是SQL Replace
功能转义反斜线(\
)是这样的:
@str = Replace(@str,'\','\\')
但问题是它会替换子的偶数字符串。但我只需要它应该从字符串中只替换具有'\'的偶数个子字符串。
这样的事情会起作用。首先,用数据中不存在的某些字符替换双斜杠组。我选择了克拉,但你可以选择任何其他可行的角色。然后用双精度替换斜杠,最后将临时字符替换为双斜杠。
select replace(replace(Replace(@str,'\\','^'), '\', '\\'), '^', '\\')
你可以做多的替代对象:
SET @str = replace(replace(replace(@str, '\\', '~~~'), '\', '\\'), '~~~', '\\')
这假定'~~~'
不会在字符串中出现。
谢谢...它的工作。 – GreenSoft
您可以使用正则表达式+ +的东西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
修改正则表达式,只要你喜欢,如果有数字,以资本字符等字符串,
待办事项你有一个示例输出? – Steven