MySql:选择以“\”字符开头的记录

时间:2013-07-30 10:12:44

标签: mysql escaping

我有一个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是如何评估它的。

5 个答案:

答案 0 :(得分:1)

这对我有用:

SELECT * FROM student WHERE description LIKE '%\\\%'

你需要两个转义级别:一个用于字符串文字,另一个用于LIKE模式。

这也有效:

SELECT * FROM student WHERE description LIKE '%\\\\%';

第一个起作用是因为\%不是转义序列,所以反斜杠保留。第二个起作用,因为第二个\\是另一个转义反斜杠,它变成一个反斜杠。

DEMO

答案 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 )可以接受查询字符串中不存在的任何其他字符。

请参阅http://sqlfiddle.com/#!2/fa5d9/5

答案 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 '%\\\%'