40

我有一个如下的 SQL 查询。

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

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

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

我该如何处理这种情况?

4

8 回答 8

35

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

... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
于 2012-05-29T17:07:51.460 回答
14

使用转义子句:

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

结果

123abc%456

您可以将转义字符设置为您想要的任何字符。在这种情况下,默认为 '\'。转义的 '\%' 变成文字,第二个 '%' 没有转义,所以又是通配符。

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

于 2012-05-29T17:11:22.057 回答
12

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

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

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

于 2012-05-29T18:09:27.180 回答
6

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


示例 - 使用转义字符

了解模式匹配时如何“转义字符”非常重要。这些示例专门处理 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

于 2014-09-19T13:08:01.273 回答
2
Select * from table where name like search_criteria

if you are expecting the user to add their own wildcards...

于 2012-05-29T16:59:30.140 回答
2

您需要转义它:在许多数据库中,这是通过在它前面加上反斜杠来完成的,\%.

就这样abc变成了abc\%

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

于 2012-05-29T17:04:01.667 回答
0

Escape the percent sign \% to make it part of your comparison value.

于 2012-05-29T16:59:33.307 回答
0

可能是这个帮助:)

DECLARE @SearchCriteria VARCHAR(25)
SET  @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT * 
FROM Employee
WHERE Name LIKE @SearchCriteria
于 2013-12-02T00:39:10.577 回答