2014-09-03 102 views
1

我在MySQL数据库中有一个表emp,它有列作为名称。在该名称列中,值为'abc \ xyz'。我想搜索这个值。我曾尝试使用下面的查询尝试:搜索MySQL中有特殊字符的字符串值

select * from emp where name like 'abc\xyz'; 

我也有试过

select * from emp where name like 'abc\xyz' escape '\\'; 

,但我并没有发现任何输出。你能帮我找到这样的字符串吗?这样的字符串可以在任何位置具有特殊字符。

在此先感谢。

+1

试过'其中name =“ABC \\ xyz''? – Phil 2014-09-03 06:28:26

+0

它工作。但是如果我想用通配符搜索一个字符串呢?如果我的字符串像1111abc \ xyz2222,并且我尝试使用abc \ xyz匹配或者使用like? – 2014-09-03 06:31:59

+0

你能举个例子吗? – Phil 2014-09-03 06:33:20

回答

1

你可以尝试这样的:

select * from emp 
where empname like '%abc\\\\xyz%' 

SQL Fiddle Demo

docs

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

+0

我认为你的一些doco文本被StackOverflow转义:)另外,你不需要' ESCAPE'字符,因为您没有使用任何字面值'%'或'_' – Phil 2014-09-03 06:34:34

+0

RT上述不起作用。我已经尝试过了。 – 2014-09-03 06:34:36

+0

@AasifSolkar我不得不在这篇文章中修复一些格式。要在“LIKE”匹配中搜索文字“\”,必须使用4个反斜杠,例如'abc \\\\ xyz' – Phil 2014-09-03 06:55:32

0
SELECT REPLACE(text,'\\','') FROM tbl 

您可以使用替换要删除一些特殊字符:)

+0

这有破坏结果的问题。不推荐 – Phil 2014-09-03 06:37:44

+0

这不是最好的方法,但它可以取代特殊字符 – 2014-09-03 06:41:18

+0

我们可以使用替换功能,但是如果我的特殊字符位于开始或结束位置,它会显示错误。对于例如我试过 select * from emp where replace(name,'\\','')like replace('\ xyz \ abc \','\\',''); 但它给出的错误为 您的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以在第1行'\\','')'附近使用正确的语法。 – 2014-09-03 06:42:30