MYSQL WHERE LIKE语句

Mik*_*ike 8 mysql sql-like

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

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956%'
Run Code Online (Sandbox Code Playgroud)

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

C:\SCAN\Parker_Apple_Ben_20-10-1830\TEST
Run Code Online (Sandbox Code Playgroud)

上面的SQL语句工作正常并且获取了相关的行,但是如果我例如在LIKE子句的末尾添加"\"字符(如下所示),它就不会正确地获取行:

SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\%'
Run Code Online (Sandbox Code Playgroud)

有趣的是,如果我在LIKE子句的开头放置一个'\'字符(如下所示),那么它就完全没法了 - 这让我感到困惑.

SELECT * FROM batches WHERE FilePath LIKE '%\Parker_Apple_Ben_20-10-1956%'
Run Code Online (Sandbox Code Playgroud)

Sim*_*tal 10

在LIKE中,_是一个匹配单个字符的通配符,因此需要转义才能正确匹配文字"_"而不是可能匹配任何内容.另外,你提到尝试将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\\\\%'
Run Code Online (Sandbox Code Playgroud)

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