SQL中对通配符进行双转义会使转义无效吗?

SQL中对通配符进行双转义会使转义无效吗?,sql,Sql,我有一个有趣的行为,我想更好地理解它,这样我就不会因为偶然的误用而挂断 以下是WHERE子句中转义“%”的示例: select * from #z where b like '%e%' ESCAPE 'e' 在此表中,使用以下值: create table #z (a int, b varchar(10)) insert into #z values (1, 'e25%') insert into #z values (2, '25') insert into #z values (3, '1

我有一个有趣的行为,我想更好地理解它,这样我就不会因为偶然的误用而挂断

以下是WHERE子句中转义“%”的示例:

select * from #z where b like '%e%' ESCAPE 'e'
在此表中,使用以下值:

create table #z (a int, b varchar(10))
insert into #z values (1, 'e25%')
insert into #z values (2, '25')
insert into #z values (3, '18%')
insert into #z values (4, 'cab')
insert into #z values (5, '2%')
选择结尾带有%的三行


但是,如果我将
如“%e%”
替换为
如“ee%”
则只选择第一行。因此,对%进行双转义似乎类似于双负数,并撤消转义,从而使%再次变回通配符。我理解正确吗?或者这里还发生了什么事?

当你写一个转义字符时,转义后的下一个字符会被逐字处理,而不是用它的特殊含义。在这种情况下,转义后面的第一个字符是“e”,因此它变成了文字“e”,而不是转义字符


同样的原则也适用于许多语言,如果你想要一个反斜杠,你必须写两个反斜杠——第一个反斜杠转义第二个,这样它就失去了它的特殊意义。

我实际上没有使用转义:我总是觉得它很奇怪。 在本例中,您正在转义第二个
e
,因此您得到
像'e%'
(没有转义)


就我个人而言,我会尽可能地使用这个
,比如“%[%]”
(没有转义)

这是一个很好的方法,@gbn。把它放在我的工具箱里以备将来使用。[咯咯声]