使用“%”的SQL“LIKE”查询,其中搜索条件包含“%”
我有一个SQL查询,如下所示使用“%”的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 如果您希望用户添加
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中没有默认的转义字符。