我在表格中有以下数据
create table Manager(id int, managerid varchar(10) , managername varchar(50))
insert into Manager(id, managerid, managername)
values (1, 'A1', 'Mangesh'), (2, 'A''2', 'Sagar'), (3, '_C[%]3', 'Ah_mad'),
(4, 'A4', 'Mango'), (5, 'B5', 'Sandesh')
我正在使用存储过程根据给定的字符获取结果。其中一个用户想要使用c[%]
进行搜索。我可以使用%
处理[%]
,但如果字符串有[%]
,那么我无法找到它。
我尝试了以下查询
declare @str varchar(100)='C[[%]'
SELECT m.*
FROM Manager m
WHERE m.managerid LIKE '%'+@str+'%'
这样我就能得到结果,但在这种情况下输入只是C[%
。我在存储过程参数中将%
替换为[%]
。但是如果输入是C[%]
,那么我的查询就不会返回任何内容。
答案 0 :(得分:1)
您必须使用%
转义方括号和[]
字符,这会告诉SQL将它们视为文字。
因此,为了找到需要转义为%
的{{1}},需要将方括号转义为[%]
您无需转义[[]
,因为如果它未与]
配对则没有特殊含义。
[
答案 1 :(得分:0)
使用Escape
忽略wildcards
。试试这个
select * from Manager
where managerid like '%c\[%]%' escape '\'
答案 2 :(得分:0)
你只需要逃离一个开口' ['
SELECT * FROM MANAGER where managerid like '%_C[[%]%'
答案 3 :(得分:0)
%
,_
和[
都是特殊字符,应该进行转义。所以即使你的INSERT声明也可能是错误的。
您可以在方括号[
和]
之间放置特殊字符,使其成为字面值。
insert into Manager(id,managerid,managername)values(3,'[_]C[[][%]]3','Ah[_]mad')
您可以使用相同的方法进行搜索:
SELECT * FROM Manager
WHERE managerid LIKE '%C[[][%]]%'
或者像这样定义你自己的转义字符:
SELECT * FROM Manager
WHERE managerid LIKE '%C\[\%]%' ESCAPE '\'
以下是一些可能对您有用的文档:https://docs.microsoft.com/en-us/sql/t-sql/language-elements/like-transact-sql
答案 4 :(得分:0)
如果您尝试使用输入' C [%]' 进行搜索。检查这个答案,
declare @str varchar(100)='C[%]'
SELECT m.*
FROM Manager m
WHERE REPLACE(m.managerid,'[','') LIKE '%'+@str+'%'
答案 5 :(得分:0)
我得到了解决方案。
declare @str varchar(100)='C\[\%]'
SELECT m.*
FROM Manager m
WHERE m.managerid LIKE '%'+@str+'%' ESCAPE '\'
有效。