2013-04-04 128 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中像\\\'\_