我有一个如下的 SQL 查询。
Select * from table
where name like '%' + search_criteria + '%'
如果 search_criteria = 'abc',它将返回包含xxxabcxxxx
哪个是好的数据。
但是如果我的 search_criteria = 'abc%',它仍然会返回包含 的数据xxxabcxxx
,这不应该是这种情况。
我该如何处理这种情况?
我有一个如下的 SQL 查询。
Select * from table
where name like '%' + search_criteria + '%'
如果 search_criteria = 'abc',它将返回包含xxxabcxxxx
哪个是好的数据。
但是如果我的 search_criteria = 'abc%',它仍然会返回包含 的数据xxxabcxxx
,这不应该是这种情况。
我该如何处理这种情况?
如果您希望将%
符号 insearch_criteria
视为文字字符而不是通配符,请将其转义为[%]
... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
使用转义子句:
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
我更喜欢charindex而不是like。从历史上看,它有更好的性能,但我不确定它现在是否有很大的不同。
要转义 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
Select * from table where name like search_criteria
if you are expecting the user to add their own wildcards...
Escape the percent sign \%
to make it part of your comparison value.
可能是这个帮助:)
DECLARE @SearchCriteria VARCHAR(25)
SET @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT *
FROM Employee
WHERE Name LIKE @SearchCriteria