在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, '18%') 
insert into #z values (4, 'cab') 
insert into #z values (5, '2%') 

与在所述%选择三个行结束。

但是,如果我有like 'ee%'取代like '%e%'它只选择第一行。如此看来,双逃逸%是像双负,并撤消逸出,从而使%回通配符一次。我是否正确理解这一点?或者还有其他事情在这里发生?

我不实际使用ESCAPE:我一直觉得很奇怪。 在这种情况下,你在逃避第二e等你拿like 'e%'(无法逃脱)

就个人而言,我会用这个like '%[%]'(无法逃脱)在可能的情况

+0

这是一个不错的一个,@gbn 。将它放到我的工具箱*将来使用。 [沉闷声] – Cyberherbalist 2010-08-04 21:57:17

当你写一个转义字符,然后下一个字符转义被视为从字面上看,而不是与它的特殊含义后。在这种情况下,转义符后面的第一个字符是'e',所以这变成了字面'e'而不是转义字符,否则就是。

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