MYSQL WHERE LIKE语句

时间:2013-04-04 11:55:45

标签: mysql sql-like

我试图在mysql语句中使用LIKE子句,如下所示:

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

'FilePath'列中的数据匹配数据是:

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 个答案:

答案 0 :(得分:9)

在LIKE中,_是匹配单个字符的通配符,因此需要转义以正确匹配文字“_”而不是可能匹配任何内容。另外,你提到尝试将1830年结束的字符串与1956年结尾相匹配。最后,正如J W和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

答案 1 :(得分:3)

在当前查询中添加\转义%,试试这个

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

要搜索“\”,请将其指定为“\\\\”;这是因为   反斜杠被解析器剥离一次,并在模式时再次剥离   匹配,留下一个反斜杠匹配。

答案 2 :(得分:2)

使用四重逃脱:

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

Explanation here

答案 3 :(得分:0)

你应该逃避你的'\'字符。试试这个:

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

答案 4 :(得分:0)

这是因为\%是MySQL中的转义字符,有关详细信息,请参阅以下内容:

https://stackoverflow.com/a/881208/1666167

答案 5 :(得分:0)

你应该在像\\\'\_

这样的mysql中转义像\,',_等特殊字符