2012-08-30 250 views
1

在單引號我有這個疑問:MySQL查詢與where子句

SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\'infinito%' 

到表中的值包含斜槓引號之前。 爲什麼查詢返回沒有結果?

感謝

回答

0

試試這個:

SELECT * FROM tbname WHERE LCASE(title) LIKE '%l\\\'infinito%' 
+0

嗨,返回錯誤1064 ... – user1636103

+0

@ user1636103顯示錶'tbname'的一些價值。 – hims056

+0

SELECT id,titolo FROM catalogo WHERE LCASE(titolo)LIKE'%l'infinito%' – user1636103

2

逃逸是正確的。你其實並不需要LCASE因爲LIKE不區分大小寫(至少不是在我的Linux系統):

mysql> SELECT 'L\'Infinito' LIKE '%l\'infinito%'; 
+------------------------------------+ 
| 'L\'Infinito' LIKE '%l\'infinito%' | 
+------------------------------------+ 
|         1 | 
+------------------------------------+ 
1 row in set (0.00 sec) 

也許你要搜索L'Infinito的,以「N」。或者,也許標題似乎包含單引號,但它是那些從來沒有足夠該死的Windows Word反向英文引號之一。

或者在引用後面的標題中可能有空格。在許多字體中,這不是立即可見的。

L' infinito 

您可以搜索使用 '%ifinito%'(或 '%INFINITO%'),並確認發現的行確實包含一個ASCII報價?

UPDATE

...最後,也許數據庫是錯誤的。即:

mysql> CREATE TABLE catalogo (title varchar (32)); 
mysql> INSERT INTO catalogo VALUES ('L\'Infinito'); 
mysql> SELECT * FROM catalogo; 
+------------+ 
| title  | 
+------------+ 
| L'Infinito | 
+------------+ 

如果像以前一樣運行相同SELECT,並返回MySQL的L'Infinito的沒有逃脫?因爲如果你不是

+-------------+ 
| title  | 
+-------------+ 
| L\'Infinito | 
+-------------+ 

然後標題已經保存錯誤兩次逃脫報價跡象。因此,L和報價單之間有一個轉義符號,您必須搜索以「中和」該錯誤。請參閱

L\\\'Infinito 

以「中和」錯誤。

+0

我試圖 SELECT標識,TITOLO FROM catalogo WHERE LCASE(TITOLO)LIKE '%\從' INFINITO%' 刪除字符 「l」 的標題和我有一個結果... – user1636103

+0

您可能在字符串中有一個空格。 *發佈結果!* :-) – LSerni

+0

它可能是'''而不是'''。 – tadman

0

下面的查詢將回答你的問題:

string s="'infinito"; 
s=s.Replace("'", "''"); 
SELECT * FROM tbname WHERE LCASE(title) LIKE '%s%'