我试图在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
| 归档时间: |
|
| 查看次数: |
47217 次 |
| 最近记录: |