我试图在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%'
答案 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\\\\%'
答案 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\\\\%'
答案 3 :(得分:0)
你应该逃避你的'\'字符。试试这个:
SELECT * FROM batches WHERE FilePath LIKE '%Parker_Apple_Ben_20-10-1956\\%'
答案 4 :(得分:0)
这是因为\%
是MySQL中的转义字符,有关详细信息,请参阅以下内容:
答案 5 :(得分:0)
你应该在像\\
,\'
,\_