繁体   English   中英

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

[英]How to handle special characters in SQL Server Select query

我表中有以下数据

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[%]则我的查询未返回任何内容。

您必须使用[]转义方括号和%字符,这告诉SQL将它们视为文字。

因此,为了找到需要转义的%[%] ,对于需要将其转义为[[]的方括号也是如此

您不需要转义[ ]因为如果未与[ ]配对,则没有特殊含义。

select * from Manager where managerid like '%c[[][%]]%'

使用Escape忽略wildcards 尝试这个

select * from Manager 
where managerid like '%c\[%]%' escape '\'

您只需要转义一个开头的'['

SELECT * FROM MANAGER where managerid like '%_C[[%]%'

%_[都是特殊字符,应转义。 因此,即使您的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/zh-cn/sql/t-sql/language-elements/like-transact-sql

如果您尝试使用输入'C [%]'进行搜索。 检查这个答案,

declare @str varchar(100)='C[%]'

SELECT m.* 
FROM Manager m 
WHERE REPLACE(m.managerid,'[','')    LIKE  '%'+@str+'%'

我找到了解决方案。

declare @str varchar(100)='C\[\%]'

SELECT m.* 
FROM Manager m 
WHERE m.managerid LIKE '%'+@str+'%' ESCAPE '\'

有效。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM