2013-04-04 175 views
5

我試圖使用LIKE子句中一個MySQL聲明如下:MYSQL WHERE LIKE語句

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956%' 

數據的「文件路徑」列中匹配的數據是:

C:\SCAN\Parker_Apple_Ben_20-10-1830\TEST 

以上SQL語句工作正常,並拿起相關的行,但如果我例如將「\」字符添加到LIKE子句的末尾(如下所示),它不會正確拾取該行:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\%' 

有趣的是,如果我在LIKE子句的開始處放置一個'\'字符(如下所示),它會很好地拾取該行 - 這讓我感到莫名其妙。

SELECT * FROM batches WHERE FilePath LIKE '%\Parker_Apple_Ben_20-10-1956%' 

回答

6

內的類似,_是匹配單個字符的通配符,因此需要轉義的正確匹配一個「_」,而不是潛在的匹配任何東西。另外,你都在提試圖匹配在1830年有類似的結局1956年最後結束串由JW和MySQL文檔提到你需要逃避反斜槓兩次

http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like

因爲MySQL使用C轉義語法在字符串中(例如,「\ n」到 代表換行符),則必須使LIKE字符串中使用 的任何「\」加倍。例如,要搜索「\ n」,請將其指定爲「\ n」。 要搜索「\」,請將其指定爲「\\」;這是因爲 反斜槓被解析器剝離了一次,並且當 匹配時,再次匹配反斜槓。

嘗試

SELECT * FROM batches 
WHERE FilePath LIKE '%Parker\_Apple\_Ben\_20-10-1830\\\\%' 

http://sqlfiddle.com/#!2/3ce74/3

0

你應該逃脫你的 '\' 字符。試試這個:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\\%' 
+0

嗨,我也嘗試過,但沒有運氣 – Mike 2013-04-04 11:58:43

1

當前查詢逃逸%加入\,試試這個

SELECT * FROM batches WHERE FilePath LIKE '%Parker\_Apple\_Ben\_20-10-1956\\\\%' 

要搜索「\」,指定它爲「 \\\\」;這是因爲 反斜槓被解析器剝離了一次,並且當 匹配時,再次匹配反斜槓。

+0

你試過嗎? – 2013-04-04 12:04:38

0

你應該逃避特殊字符,如\」,_等在mysql中像\\\'\_