1

我有一个student表,其中有description列。现在我想选择所有在description. 现在如果我根据特殊字符序列“\\”是正确的代表“\”。

但如下查询不起作用:

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

以下查询正在工作:

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

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

所以我只是不知道如何MySql评价它。

4

5 回答 5

1

这对我有用:

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

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

这也有效:

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

第一个有效,因为\%不是转义序列,因此保留了反斜杠。第二个有效,因为第二个\\是另一个转义的反斜杠,它变成了一个反斜杠。

演示

于 2013-07-30T10:20:47.633 回答
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

于 2013-07-30T10:24:14.093 回答
0

请参阅此处的第一个“注释”:http: //dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html

因为 MySQL 在字符串中使用 C 转义语法(例如,“\n”表示换行符),所以您必须将在 LIKE 字符串中使用的任何“\”加倍。例如,要搜索“\n”,请将其指定为“\\n”。要搜索“\”,请将其指定为“\\\\”;这是因为反斜杠被解析器剥离一次,并且在进行模式匹配时再次剥离,留下一个反斜杠进行匹配。

于 2013-07-30T10:22:09.567 回答
0

你需要阅读这个页面

因为 MySQL 在字符串中使用 C 转义语法(例如,“\n”表示换行符),所以您必须将在 LIKE 字符串中使用的任何“\”加倍。例如,要搜索“\n”,请将其指定为“\n”。要搜索“\”,请将其指定为“\\”;这是因为反斜杠被解析器剥离一次,并且在进行模式匹配时再次剥离,留下一个反斜杠进行匹配。

例外:在模式字符串的末尾,可以将反斜杠指定为“\”。在字符串的末尾,反斜杠代表它本身,因为没有任何内容可以转义。假设一个表包含以下值:

于 2013-07-30T10:24:07.680 回答
0

首先,您必须转义 \ 文字。像你一样,你也必须逃避转义的文字。请参阅以下示例:

正则表达式只需要一次转义:

select * from student where test_char REGEXP "[\\]+";

LIKE 需要一个额外的转义:

select * from student where test_char LIKE '%\\\%'
于 2013-07-30T10:26:17.837 回答