2011-02-02 29 views
1

我有几个EMP的名字,像具有特殊字符的SQL查询 - 如何处理?

  1. 约翰,1
  2. 魔鬼的
  3. 玉米

像这样

现在,当我在寻找这些名字我正在使用

select * from emp where empname like ('john,1,devil's,corn') 

但我没有得到预期的值也收到错误,因为emp名称包含特殊的字符和''。

有人可以帮我解决这个问题吗?

+0

什么版本的SQL(甲骨文,MYSQL,Microsoft SQL) – Sparky 2011-02-02 13:32:59

+0

对不起,我正在使用sql server 2005 – jestges 2011-02-02 13:34:02

回答

5

这里假设你有你的榜样串

完全匹配3离散名。你需要加倍报价。

select * from emp where 
empname IN ('john,1' , 'devil''s', 'corn') 

您也不能在SQL Server中使用LIKE/IN。

select * from emp where 
    empname like '%john,1%' 
    OR 
    empname like '%devil''s%' 
    OR 
    empname like '%corn%' 
0

,如果你使用mysql:

select * from emp where empname like ('john,1','devil\'s','corn') 
+0

我认为,对于sql服务器,你可以通过''(两个单一qoute)而不是\'转义单引号。 – Ratinho 2011-02-02 13:39:47

0
select * from emp where empname like ('john\,1','devil\'s','corn\'') escape '\' 

使用关键字逃生提的查询转义字符。

0

对于大多数SQL版本,例如,您需要转义单引号。

select * from emp where empname like ('john,1,devil''s,corn') 

此外,上面的示例正在寻找一个非常具体的字符串值,您需要包括*或?作为通配符,所以要寻找所有的empname的像魔鬼的,使用

select * from emp where empname like '%devil''s%' 

又如

select * from emp where empname like 'john,1%' 
0

如果您正在寻找“恶魔”的empname,那么我同意使用Sachin和Ratinho使用的转义字符。

但是,like子句用于与另一个子句相似的内容。例如,如果你正在寻找的东西,与“魔鬼”开始,那么你可以使用

select * from emp where empname like ('devil\'s%') 

这将匹配

devil's peak 
devil's beard 
devil's 

但不

Devil's peak 
deviled eggs 
devil 

如果你想匹配在中间使用“恶魔”的名字,那么你可以使用

select * from emp where empname like ('%devil\'s%')