我需要一个可以逃脱的SQL函数或查询' \' (反斜杠)但只有奇数的' \'来自字符串的(反斜杠)。
例如:
DECLARE @str nvarchar(max) ='abc\df\\gh\\\eg\\\\yu'
我正在使用SQL Replace
函数来转义反斜杠(\
),如下所示:
@str = Replace(@str,'\','\\')
但问题是它会取代偶数个子字符串。但是我只需要它就应该只替换偶数个子字符串,这些子字符串具有' \'来自字符串。
答案 0 :(得分:2)
这样的东西会起作用。首先,用一些在数据中不存在的字符替换双斜杠组。我选择了克拉,但你可以选择任何其他可行的角色。然后用双精度替换斜杠,最后将临时字符替换为双斜杠。
select replace(replace(Replace(@str,'\\','^'), '\', '\\'), '^', '\\')
答案 1 :(得分:1)
您可以进行多次替换:
SET @str = replace(replace(replace(@str, '\\', '~~~'), '\', '\\'), '~~~', '\\')
这假设字符串中没有出现'~~~'
。
答案 2 :(得分:0)
你可以使用Regex + Stuff + 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
根据需要修改正则表达式,如果它有数字,带有大写字符的字符串等,