带有特殊字符的SQL查询 - 如何处理?

时间:2011-02-02 13:31:02

标签: sql sql-server-2005 sql-like

我很少有像

这样的名字
  
      
  1. john,1
  2.   
  3. 魔鬼的
  4.   
  5. 玉米
  6.   

类似这样的事情

现在,当我正在搜索这些名字时,我正在使用

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

但是我没有得到预期的值也因为我的名字包含特殊的字符,例如和'。

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

5 个答案:

答案 0 :(得分: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%'

答案 1 :(得分:0)

如果你使用mysql:

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

答案 2 :(得分:0)

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

使用关键字转义来提及查询的转义字符。

答案 3 :(得分: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%'

答案 4 :(得分:0)

如果你正在寻找“魔鬼”的同名词,那么我同意使用Sachin和Ratinho使用的逃脱角色。

但是,like子句用于与另一个子句类似的东西。例如,如果您正在寻找以“devil's”开头的内容,那么您可以使用

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

匹配

devil's peak
devil's beard
devil's

但不是

Devil's peak
deviled eggs
devil

如果你想在中间匹配一个empname和“devil's”,你可以使用

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