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

pra*_*tik 34 sql sql-server sql-like

我有一个SQL查询如下.

Select * from table 
where name like '%' + search_criteria + '%' 
Run Code Online (Sandbox Code Playgroud)

如果search_criteria ='abc',它将返回包含xxxabcxxxx哪个数据的数据.

但是如果我的search_criteria ='abc%',它仍将返回包含的数据xxxabcxxx,但不应该是这种情况.

我该如何处理这种情况?

Ale*_* K. 29

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

... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
Run Code Online (Sandbox Code Playgroud)


Gor*_*off 12

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

Select * 
from table
where charindex(search_criteria, name) > 0
Run Code Online (Sandbox Code Playgroud)

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


Gle*_*enn 9

使用转义条款:

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

结果

123abc%456
Run Code Online (Sandbox Code Playgroud)

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

请参见SQL LIKE子句的特殊字符列表


Ign*_*ers 6

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


示例 - 使用转义字符

了解如何在模式匹配时“转义字符”很重要。这些示例专门处理 Oracle 中的转义字符。

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

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

例如:

SELECT *
FROM suppliers
WHERE supplier_name LIKE '!%' escape '!';
Run Code Online (Sandbox Code Playgroud)

此 SQL LIKE 条件示例标识了 ! 字符作为转义字符。此语句将返回名称为 % 的所有供应商。

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

SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!%' escape '!';
Run Code Online (Sandbox Code Playgroud)

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

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

例如:

SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';
Run Code Online (Sandbox Code Playgroud)

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


参考:sql/like