我有一个SQL查询,如下所示。
Select * from table
where name like '%' + search_criteria + '%'
如果search_criteria ='abc',它将返回包含xxxabcxxxx
的数据,这很好。
但如果我的search_criteria ='abc%',它仍然会返回包含xxxabcxxx
的数据,但情况并非如此。
我该如何处理这种情况?
答案 0 :(得分:27)
如果您希望将%
中的search_criteria
符号视为文字字符而不是通配符,请将其转义为[%]
... where name like '%' + replace(search_criteria, '%', '[%]') + '%'
答案 1 :(得分:12)
最简单的解决方案是完全免除“喜欢”:
Select *
from table
where charindex(search_criteria, name) > 0
我更喜欢charindex。从历史上看,它有更好的性能,但我不确定它现在是否有很大的不同。
答案 2 :(得分:9)
使用转义条款:
select *
from (select '123abc456' AS result from dual
union all
select '123abc%456' AS result from dual
)
WHERE result LIKE '%abc\%%' escape '\'
结果
123abc%456
您可以将转义字符设置为您想要的任何内容。在这种情况下,默认为'\'。转义'\%'成为一个文字,第二个'%'没有转义,所以再次使用外卡。
答案 3 :(得分:4)
要转义sql中的字符,您可以使用!
:
示例 - 使用ESCAPE字符
了解如何逃避角色"非常重要。模式匹配时。这些示例专门处理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
答案 4 :(得分:2)
Select * from table where name like search_criteria
如果您希望用户添加自己的通配符......
答案 5 :(得分:2)
你需要逃避它:在许多数据库上,这是通过在反斜杠前加\%
来完成的。
因此abc
变为abc\%
。
您的编程语言将具有特定于数据库的功能来为您执行此操作。例如,PHP具有MySQL数据库的mysql_escape_string()。
答案 6 :(得分:0)
转过百分号\%
,使其成为比较值的一部分。
答案 7 :(得分:0)
可能是这个帮助:)
DECLARE @SearchCriteria VARCHAR(25)
SET @SearchCriteria = 'employee'
IF CHARINDEX('%', @SearchCriteria) = 0
BEGIN
SET @SearchCriteria = '%' + @SearchCriteria + '%'
END
SELECT *
FROM Employee
WHERE Name LIKE @SearchCriteria