2010-08-04 57 views
2

我有一個有趣的現象,我想更好地瞭解,所以我不先掛了意外誤用。在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%'它只選擇第一行。如此看來,雙逃逸%是像雙負,並撤消逸出,從而使%回通配符一次。我是否正確理解這一點?或者還有其他事情在這裏發生?

回答

5

我不實際使用ESCAPE:我一直覺得很奇怪。 在這種情況下,你在逃避第二e等你拿like 'e%'(無法逃脫)

就個人而言,我會用這個like '%[%]'(無法逃脫)在可能的情況

+0

這是一個不錯的一個,@gbn 。將它放到我的工具箱中供將來使用。 [沉悶聲] – Cyberherbalist 2010-08-04 21:57:17

2

當你寫一個轉義字符,然後下一個字符轉義被視爲從字面上看,而不是與它的特殊含義後。在這種情況下,轉義符後面的第一個字符是'e',所以這變成了字面'e'而不是轉義字符,否則就是。

同樣的原則也適用於這裏,如果你想你必須寫兩個反斜槓反斜槓許多語言 - 第一個反斜槓轉義第二,這樣它就失去了特殊的意義。