SQL'LIKE'查询使用'%',其中搜索条件包含'%'

时间:2012-05-29 16:56:27

标签: sql sql-server sql-like

我有一个SQL查询,如下所示。

Select * from table 
where name like '%' + search_criteria + '%' 

如果search_criteria ='abc',它将返回包含xxxabcxxxx的数据,这很好。

但如果我的search_criteria ='abc%',它仍然会返回包含xxxabcxxx的数据,但情况并非如此。

我该如何处理这种情况?

8 个答案:

答案 0 :(得分:27)

如果您希望将%中的search_criteria符号视为文字字符而不是通配符,请将其转义为[%]

... where name like '%' + replace(search_criteria, '%', '[%]') + '%'

答案 1 :(得分:12)

最简单的解决方案是完全免除“喜欢”:

Select * 
from table
where charindex(search_criteria, name) > 0

我更喜欢charindex。从历史上看,它有更好的性能,但我不确定它现在是否有很大的不同。

答案 2 :(得分:9)

使用转义条款:

select *
  from (select '123abc456' AS result from dual
        union all
        select '123abc%456' AS result from dual
       )
  WHERE result LIKE '%abc\%%' escape '\'

结果

123abc%456

您可以将转义字符设置为您想要的任何内容。在这种情况下,默认为'\'。转义'\%'成为一个文字,第二个'%'没有转义,所以再次使用外卡。

请参阅List of special characters for SQL LIKE clause

答案 3 :(得分:4)

要转义sql中的字符,您可以使用!


示例 - 使用ESCAPE字符

了解如何逃避角色"非常重要。模式匹配时。这些示例专门处理Oracle中的转义字符。

假设您想在SQL LIKE条件中搜索%或_字符。您可以使用Escape字符执行此操作。

请注意,您只能将转义字符定义为单个字符(长度为1)。

例如:

SELECT *
FROM suppliers
WHERE supplier_name LIKE '!%' escape '!';

这个SQL LIKE条件示例标识了!角色作为逃脱角色。该声明将返回名称为%的所有供应商。

这是另一个在SQL LIKE条件中使用转义字符的更复杂的示例。

SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!%' escape '!';

此SQL LIKE条件示例返回名称以H开头并以%结尾的所有供应商。例如,它会返回一个值,例如' Hello%'。

您还可以在SQL LIKE条件中使用带有_字符的转义字符。

例如:

SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';

此SQL LIKE条件示例返回名称以H开头并以_结尾的所有供应商。例如,它会返回一个值,例如' Hello _'。


参考:sql/like

答案 4 :(得分:2)

Select * from table where name like search_criteria

如果您希望用户添加自己的通配符......

答案 5 :(得分:2)

你需要逃避它:在许多数据库上,这是通过在反斜杠前加\%来完成的。

因此abc变为abc\%

您的编程语言将具有特定于数据库的功能来为您执行此操作。例如,PHP具有MySQL数据库的mysql_escape_string()。

答案 6 :(得分:0)

转过百分号\%,使其成为比较值的一部分。

答案 7 :(得分:0)

可能是这个帮助:)

DECLARE @SearchCriteria VARCHAR(25)
SET  @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT * 
FROM Employee
WHERE Name LIKE @SearchCriteria