如何逃脱SQL Server中的章程?

时间:2016-09-06 14:56:09

标签: sql-server escaping sql-server-2014

我需要一个可以逃脱的SQL函数或查询' \' (反斜杠)但只有奇数的' \'来自字符串的(反斜杠)。

例如:

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

我正在使用SQL Replace函数来转义反斜杠(\),如下所示:

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

但问题是它会取代偶数个子字符串。但是我只需要它就应该只替换偶数个子字符串,这些子字符串具有' \'来自字符串。

3 个答案:

答案 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

根据需要修改正则表达式,如果它有数字,带有大写字符的字符串等,