首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySql:选择以"\“字符开头的记录

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

Stack Overflow用户
提问于 2013-07-30 10:12:43
回答 5查看 157关注 0票数 1

我有一个student表,其中有description列。现在,我希望选择在description中具有'\‘(反斜杠)的所有记录。现在,如果我是正确的,根据特殊字符序列,"\“代表"\”。

但是,如下查询不起作用:

代码语言:javascript
复制
SELECT * FROM student WHERE description LIKE '%\\%'

以下查询正在进行中:

代码语言:javascript
复制
SELECT * FROM student WHERE description LIKE '%\\\%'

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

所以我不知道MySql是如何评估它的。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-07-30 10:20:47

这对我来说很管用:

代码语言:javascript
复制
SELECT * FROM student WHERE description LIKE '%\\\%'

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

这也适用于:

代码语言:javascript
复制
SELECT * FROM student WHERE description LIKE '%\\\\%';

第一个方法可以工作,因为\%不是转义序列,所以反斜杠保留在其中。第二个操作是因为第二个\\是另一个转义反斜杠,它变成了一个反斜杠。

演示

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 10:24:14

喜欢

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

作为仅保留“解析器反斜杠剥离”的解决办法,请使用以下语法:

代码语言:javascript
复制
select * from T where s like "%\\%" escape "#";

(我在这里使用#,但查询字符串中不存在的任何其他字符都可用于转义)。

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

票数 1
EN

Stack Overflow用户

发布于 2013-07-30 10:22:09

参见这里的第一个“注意事项”:http://dev.mysql.com/doc/refman/5.6/en/string-comparison-functions.html

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17944208

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档