如何处理SQL Server Select查询中的特殊字符

时间:2018-01-12 15:07:51

标签: sql sql-server

我在表格中有以下数据

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[%],那么我的查询就不会返回任何内容。

6 个答案:

答案 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 '\'

有效。