Как найти "%" с оператором LIKE в SQL Server?

У меня есть имя столбца Адрес, который состоит из некоторого адреса, который имеет "%" между ними как:

Address
--------------------
Aman Ja%lan%
Stree% Ro%ad

и т.д. и т.д.

Как я могу написать оператор LIKE для поиска этого шаблона?

Я пробовал:

declare @var char(1)
set @var='!%'
select Address from Accomodation where Address like '%'[email protected]+'%'

Ответ 1

я хотел бы использовать

WHERE columnName LIKE '%[%]%'

SQL Server хранит сводную статистику строк для использования при оценке количества строк, которые будут соответствовать предложению LIKE. Оценки мощности могут быть лучше и привести к более подходящему плану при использовании синтаксиса в квадратных скобках.

Ответ на этот элемент подключения

У нас нет поддержки точной оценки количества элементов в присутствии определенных пользователем escape-символов. Таким образом, мы, вероятно, получаем плохую оценку и плохой план. Мы рассмотрим этот вопрос в следующем выпуске.

Пример

CREATE TABLE T
(
X VARCHAR(50),
Y CHAR(2000) NULL
)

CREATE NONCLUSTERED INDEX IX ON T(X)

INSERT INTO T (X)
SELECT TOP (5) '10% off'
FROM master..spt_values
UNION ALL
SELECT  TOP (100000)  'blah'
FROM master..spt_values v1,  master..spt_values v2


SET STATISTICS IO ON;
SELECT *
FROM T 
WHERE X LIKE '%[%]%'

SELECT *
FROM T
WHERE X LIKE '%\%%' ESCAPE '\'

Показывает 457 логических чтений для первого запроса и 33,335 для второго.

Ответ 2

Вы можете использовать ESCAPE:

WHERE columnName LIKE '%\%%' ESCAPE '\'

Ответ 3

Попробуйте следующее:

declare @var char(3)
set @var='[%]'
select Address from Accomodation where Address like '%'[email protected]+'%' 

Вы должны использовать [] отменяет эффект подстановочного знака, поэтому вы читаете% как обычный символ, idem о персонаже _