方括号按预期在表达式中运行
Square brackets functioning in expression as expected
我正在寻找包含此字符串的字符串 [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 '\'
上面找到了我所期望的,但为什么下面找不到相同的字符串?
select * from #test where st like '%[[]management[]]%'
您应该只像这样转义开始括号:
DECLARE @t table(x varchar(100))
INSERT @t
SELECT '[management]'
SELECT * from @t where x like '%[[]management]%'
编辑:
一旦您输入“[]]”,like 期望找到一个不匹配的字符。 '[xy]]' 将要求字符列表('x' 或 'y')位于该位置,'[]]' 将导致该位置为空字符列表,让比赛变得不可能。
好问题!直觉上感觉 %[[]text[]]% 应该解析为:
任何东西[文本]任何东西。
但事实并非如此。因为 ] 与 [ 不同,它不会启动模式搜索,因此不需要转义。请改用 %[[]text]%。
有关详细信息,请参阅 MSDN Like 页面上的 "Using Wildcard Characters As Literals" 部分。
我正在寻找包含此字符串的字符串 [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 '\'
上面找到了我所期望的,但为什么下面找不到相同的字符串?
select * from #test where st like '%[[]management[]]%'
您应该只像这样转义开始括号:
DECLARE @t table(x varchar(100))
INSERT @t
SELECT '[management]'
SELECT * from @t where x like '%[[]management]%'
编辑:
一旦您输入“[]]”,like 期望找到一个不匹配的字符。 '[xy]]' 将要求字符列表('x' 或 'y')位于该位置,'[]]' 将导致该位置为空字符列表,让比赛变得不可能。
好问题!直觉上感觉 %[[]text[]]% 应该解析为:
任何东西[文本]任何东西。
但事实并非如此。因为 ] 与 [ 不同,它不会启动模式搜索,因此不需要转义。请改用 %[[]text]%。
有关详细信息,请参阅 MSDN Like 页面上的 "Using Wildcard Characters As Literals" 部分。