我有一个student
表,其中有description
列。现在我想在description
中选择所有具有'\'(反斜杠)的记录。
现在如果根据special character sequence我是正确的,“\\”代表“\”。
但是查询如下:
SELECT * FROM student WHERE description LIKE '%\\%'
以下查询正在运作:
SELECT * FROM student WHERE description LIKE '%\\\%'
SELECT * FROM student WHERE description LIKE '%\\\\%'
所以我只是不知道MySql
是如何评估它的。
答案 0 :(得分:1)
这对我有用:
SELECT * FROM student WHERE description LIKE '%\\\%'
你需要两个转义级别:一个用于字符串文字,另一个用于LIKE模式。
这也有效:
SELECT * FROM student WHERE description LIKE '%\\\\%';
第一个起作用是因为\%
不是转义序列,所以反斜杠保留。第二个起作用,因为第二个\\
是另一个转义反斜杠,它变成一个反斜杠。
答案 1 :(得分:1)
http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html#operator_like
因为MySQL在字符串中使用C转义语法(例如,“\ n”到 代表一个换行符),你必须加倍你使用的任何“\” 在LIKE字符串中。例如,要搜索“\ n”,请将其指定为“\ n”。 要搜索“\”,请将其指定为“\\\\”;这是因为 反斜杠被解析器剥离一次,并在模式时再次剥离 匹配,留下一个反斜杠匹配。
作为仅保留“解析器反斜杠剥离”的解决方法,请使用以下语法:
select * from T where s like "%\\%" escape "#";
(我在这里使用#
,但 escape )可以接受查询字符串中不存在的任何其他字符。
答案 2 :(得分:0)
请在此处查看第一个“注释”:http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html
因为MySQL在字符串中使用C转义语法(例如,“\ n”表示换行符),所以必须将在LIKE字符串中使用的任何“\”加倍。例如,要搜索“\ n”,请将其指定为“\\ n”。要搜索“\”,请将其指定为“\\\\”;这是因为解析器会将反斜杠剥离一次,并且在进行模式匹配时再次剥离反斜杠,只留下一个反斜杠。
答案 3 :(得分:0)
您需要阅读this page。
因为MySQL在字符串中使用C转义语法(例如,“\ n”到 代表一个换行符),你必须加倍你使用的任何“\” 在LIKE字符串中。例如,要搜索“\ n”,请将其指定为“\ n”。 要搜索“\”,请将其指定为“\\”;这是因为 反斜杠被解析器剥离一次,并在模式时再次剥离 匹配,留下一个反斜杠匹配。
异常:在模式字符串的末尾,反斜杠可以 指定为“\”。在字符串的末尾,反斜杠代表 本身因为没有任何东西可以逃脱。假设一个 table包含以下值:
答案 4 :(得分:0)
首先你必须逃避\ literal。就像你必须逃脱逃脱的文字一样。见下面的例子:
正则表达式只需要一次转义:
select * from student where test_char REGEXP "[\\]+";
LIKE需要一次额外的转义:
select * from student where test_char LIKE '%\\\%'