Sql查询 - 搜索包含通配符的varchar

时间:2015-12-10 08:50:36

标签: sql

如果我执行此查询:

select * from product where product_name like '%';

它获得了所有产品和预期的产品。

但我希望获得名称中包含通配符'%'的产品。 我怎么能这样做?

4 个答案:

答案 0 :(得分:5)

假设你正在使用SQL-Server(以为你已经在某处提到过):

您必须使用括号转义通配符%

select *  from product  where product_name like '%[%]%';

Demo

旁注:如果你想搜索下划线,你必须这样做:

select *  from product  where product_name like '%[_]%';

因为这意味着任何单个字符

答案 1 :(得分:3)

您可以使用ESCAPE

  

match_expression [NOT] LIKE模式[ESCAPE escape_character]

     

是放在通配符前面的字符,表示通配符应该被解释为常规字符   字符而不是通配符。 escape_character是一个字符   表达式没有默认值,必须只评估一个   字符。

select *  
from product  
where product_name like '%|%%'  ESCAPE '|';

LiveDemo

答案 2 :(得分:2)

虽然Tim和lad2025的答案都是正确的,但SQL Server上的第三个选项是使用CHARINDEX:

 <web-app...>

  <!-------- DispatcherServlet definition goes here----->
   ....
   <context-param>
   <param-name>contextConfigLocation</param-name>
   <param-value>/WEB-INF/spring-dispatcher-servlet.xml</param-value>
   </context-param>

   <listener>
   <listener-class>
     org.springframework.web.context.ContextLoaderListener
    </listener-class>
  </listener>
 </web-app>

CHARINDEX不使用特殊字符进行模式匹配,因此您可以在搜索中使用%字符。但是,如果使用PATINDEX,它的行为类似于select * from product where charindex('%', product_name) > 0

答案 3 :(得分:0)

如果您要查找的语言是Oracle(在您的情况下看起来最像),那么

SELECT *  FROM product WHERE product_name LIKE '%\%%' ESCAPE '\';

应该有用。