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

使用“%”的SQL“LIKE”查询,其中搜索条件包含“%”,sql,sql-server,sql-like,Sql,Sql Server,Sql Like,我有一个SQL查询,如下所示 Select * from table where name like '%' + search_criteria + '%' 如果search_criteria='abc',它将返回包含xxxabcxxxx的数据,这很好 但是,如果我的搜索条件='abc%',它仍将返回包含xxxabcxxx的数据,情况应该不是这样 我如何处理这种情况 Select * from table where name like search_criteria 如果您希望用户添加

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

Select * from table 
where name like '%' + search_criteria + '%' 
如果search_criteria='abc',它将返回包含xxxabcxxxx的数据,这很好

但是,如果我的搜索条件='abc%',它仍将返回包含xxxabcxxx的数据,情况应该不是这样

我如何处理这种情况

Select * from table where name like search_criteria

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

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

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

所以abc变成了abc\%

您的编程语言将有一个特定于数据库的函数来为您执行此操作。例如,数据库具有mysql_escape_字符串。

如果希望搜索条件中的%符号被视为文字字符而不是通配符,请将其转义为[%]

使用免责条款:

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

123abc%456
您可以将转义角色设置为任何您想要的。在本例中,默认值为“\”。转义的“\%”变为文本,第二个“%”不转义,所以还是通配符


请参见

最简单的解决方案是完全省去类似的问题:

Select * 
from table
where charindex(search_criteria, name) > 0
我更喜欢查林德克斯而不是像他一样。从历史上看,它的性能更好,但我不确定它现在是否有很大的不同。

这可能有帮助:

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

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

示例-使用转义字符

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

假设您希望在类似SQL的条件下搜索%或uu字符。可以使用转义字符执行此操作

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

例如:

SELECT *
FROM suppliers
WHERE supplier_name LIKE '!%' escape '!';
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';
这个类似SQL的条件示例标识了!字符作为转义字符。此语句将返回名称为%的所有供应商

下面是在类似SQL的条件下使用转义字符的另一个更复杂的示例

SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!%' escape '!';
这个类似SQL的条件示例返回名称以H开头并以%结尾的所有供应商。例如,它将返回一个值,如“Hello%”

在类似SQL的条件下,还可以将转义字符与u字符一起使用

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

SELECT *
FROM suppliers
WHERE supplier_name LIKE '!%' escape '!';
SELECT *
FROM suppliers
WHERE supplier_name LIKE 'H%!_' escape '!';
这个类似SQL的条件示例返回名称以H开头并以x结尾的所有供应商。例如,它将返回一个值,如“Hello_389;”


参考:

那么为什么要添加自己的%?如何添加取决于您的引擎,但显然您必须避开自己的%。您使用的是什么编程语言?使用匹配而不是喜欢。我非常喜欢这个答案,因为它显然不易受SQL注入的影响,因为您避免了字符串串联。请查看v简短的比较。请注意,如果索引存在,则使用类似“findme%”的方法仍然可以使用该索引。谢谢,在tablename中提供了带有%sign select*的列,其中列类似“%[%]”这仅在使用类似运算符的转义选项时有效。无论如何,SQL Server中没有默认的转义字符。