Sql, где утверждение с = работает, но как не - PullRequest
1 голос
/ 07 июля 2019

Sql, где оператор с = работает, но LIKE не работает. Исправлено ли это?

Вот точный код:

create table zSyn (xField nvarchar(255));
insert into zSyn(xField)
select 'DEVCON 5 Minute Epoxy amber [1:1]';

--Works and returns 1 row:
select * from zSyn
where xField = 'DEVCON 5 Minute Epoxy amber [1:1]';

--Does NOT return any rows:
select * from zSyn
where xField like '%' + 'DEVCON 5 Minute Epoxy amber [1:1]' + '%'

Ответы [ 4 ]

6 голосов
/ 07 июля 2019

Вам нужно сбежать []:

select * from zSyn
where xField like ('%' + 'DEVCON 5 Minute Epoxy amber ![1:1!]' + '%') ESCAPE '!';

ДБ <> Fiddle demo

1 голос
/ 07 июля 2019

Проблема в том, что квадратные скобки представляют классы символов в SQL Server like.Одним из способов является использование escape.Вот два других варианта:

xField like '%' + 'DEVCON 5 Minute Epoxy amber [[]1:1]' + '%'
xField like '%' + 'DEVCON 5 Minute Epoxy amber _1:1_' + '%'

Второй будет соответствовать любому символу, включая квадратную скобку.Это, вероятно, хорошо для ваших целей.

0 голосов
/ 07 июля 2019

Возможно, квадратные скобки смешаны с LIKE, потому что иногда вы можете использовать квадратные скобки для поиска числовых или буквенных символов, например, LIKE ([AZ])

SELECT * FROM zSyn WHERE xField LIKE ('%DEVCON 5 Minute Epoxy amber %1:1%')
0 голосов
/ 07 июля 2019

Еще один вариант, если вы хотите избежать необходимости экранировать строку, это использовать charindex ()

Пример

Select * 
 From  zSyn
 Where charindex('DEVCON 5 Minute Epoxy amber [1:1]',xField)>0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...