我有一个如下的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
的数据,这是不应该的。
我该如何处理这种情况?
如果您想要将search_criteria
中的百分号%
作为字面字符而不是通配符处理,请使用转义符[%]
... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
select * from tablename where Column like '%[%]%'
。 - Shaiju T使用转义语句:
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条件中搜索%或_字符。您可以使用转义字符来实现此目的。
请注意,您只能将转义字符定义为单个字符(长度为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 '!';
Select * from table where name like search_criteria
将百分号\%
转义,使其成为您比较值的一部分。
LIKE
运算符的 ESCAPE
选项时才有效。在 SQL Server 中,没有默认的转义字符。 - David R Tribble也许这个可以帮助你 :)
DECLARE @SearchCriteria VARCHAR(25)
SET @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT *
FROM Employee
WHERE Name LIKE @SearchCriteria