2015-12-10 50 views

回答

3

您可以使用ESCAPE

MATCH_EXPRESSION [NOT] LIKE模式[ESCAPE ESCAPE_CHARACTER]

是放在通配符的前面,以指示通配符应当解释字符作为常规的 字符而不是通配符。 escape_character是一个字符 表达式,它没有默认值,只能计算一个 字符。

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

LiveDemo

+1

就是这样:)谢谢 – junior

5

假设您正在使用SQL-服务器(以为你在什么地方提到):

你必须用括号逃脱通配符%

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

Demo

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

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

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

+0

感谢您的快速回答,我会试试:) – junior

+1

没有行被选中:( – junior

+0

@neila:那么没有poducts哪个名称包含'%'。您是否注意到我编辑了我的答案。在第一个版本中,我使用了'where product_name like'[%]'',它只查找名称为'%'的产品 –

0

如果你正在寻找的语言是Oracle(它在大多数情况下,你好像),然后

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

应该工作。

2

虽然两者蒂姆和lad2025的答案是正确的,SQL Server上的第三个选项是使用CHARINDEX:

select * 
from product where charindex('%', product_name) > 0 

CHARINDEX不进行模式匹配使用特殊字符,这样你就可以在使用%字符搜索。但是,如果使用PATINDEX,则其行为与LIKE类似。

+0

您应该添加'CHARINDEX'是特定于SQL Server的。对于Oracle/MySQL OP应该使用'INSTR' – lad2025

+0

谢谢,我编辑了我的文章。 – Dan