方括号按预期在表达式中起作用

时间:2016-01-07 11:04:04

标签: sql sql-server sql-like

我正在寻找包含此字符串 var interestIds = db.Interests.Where(i => i.Name.Contains("interest_name")) .Select(i => i.InterestId) .ToList().ConvertAll(i => i.ToString()); //var profiles = new List<UserProfile>(); var allProfiles = (from UserProfile up in db.UserProfiles from i in interestIds where up.Interests.Contains(i) select up).ToList(); return allProfiles; //string sId = null; //foreach (var id in interestIds) //{ // sId = id.ToString(); // profiles.AddRange(db.UserProfiles // .Where(p => p.Interests.Contains(sId)) // .ToList()); //} //return profiles;

的字符串

这是一个场景模型:

[management]

上面找到了我的期望,但为什么以下找不到相同的字符串?

create table #test (st varchar(200))
insert into #test
values 
('hello'),
('hello management'),
('hello [management]'),
('hello [management] blah'),
('hello [management rev] blah');

select * from #test where st like '%\[management]%' ESCAPE '\'

2 个答案:

答案 0 :(得分:4)

你应该只像这样逃避起始括号:

DECLARE @t table(x varchar(100))
INSERT @t 
SELECT '[management]'

SELECT * from @t where x like '%[[]management]%'

编辑:

一旦你输入'[]]',就像一样,希望找到一个与之无关的角色。 '[xy]]'会要求一个字符列表('x'或'y')位于该位置,'[]]'将导致一个空字符列表位于该位置,使得匹配不可能

答案 1 :(得分:2)

好问题!实际上,感觉%[[] text []]%应解析为:

ANYTHING [文本] ANYTHING

但事实并非如此。因为],与[不启动模式搜索不一样,它不需要转义。请改用%[[] text]%。

有关详细信息,请参阅MSDN Like页面上的“将通配符用作文字”部分。