如果我执行此查询:
select * from product where product_name like '%';
它获得了所有产品和预期的产品。
但我希望获得名称中包含通配符'%'的产品。 我怎么能这样做?
答案 0 :(得分:5)
假设你正在使用SQL-Server(以为你已经在某处提到过):
您必须使用括号转义通配符%
:
select * from product where product_name like '%[%]%';
旁注:如果你想搜索下划线,你必须这样做:
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 '\';
应该有用。