Я хотел бы использовать
WHERE columnName LIKE '%[%]%'
статистика SQL сводного хранит Серверную строку для использования в оценивая количество строк, которые будут соответствовать предписанию LIKE
. Оценки мощности могут быть лучше и привести к более подходящему плану, когда используется синтаксис квадратной скобки.
Ответ на this Connect Item заявляет
У нас нет поддержки для оценки точной мощности в присутствии определенных пользователем символов эвакуации. Поэтому мы, вероятно, получаем плохую оценку и плохой план. Мы рассмотрим этот вопрос в следующем выпуске .
Пример
CREATE TABLE T
(
X VARCHAR(50),
Y CHAR(3000) 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 логических операций чтения для первого запроса и 50,003 для второго.
Действительно, martin, очень ясное объяснение, но как насчет случая, когда нужно искать ']' ??? Например 'INSERT INTO T (X) ВЫБРАТЬ TOP (5) '10 [] выкл ' ИЗ master..spt_values' –
Действительно стрижа, очень ясное объяснение, но как в случае, когда один должен искать' ] '??? Например 'INSERT INTO T (X) ВЫБРАТЬ TOP (5) '10 [] выкл» ИЗ master..spt_values' Для этого, когда я пытаюсь искать с [], он не пришел 'SET STATISTICS IO ON; SELECT * FROM T WHERE X LIKE '% []]%' ' Но он работал с ниже одного ' SELECT * FROM T WHERE X LIKE '% \]%' ESCAPE '\' ' –
@TejuMB - для этого не требуется экранирование. Просто используйте LIKE ''%]%''. Если вы делаете 'LIKE '% [AB]]%'', это означает совпадение символа в наборе 'A, B', затем'] '. Если вы делаете 'LIKE '% [A]]%'', это означает соответствие 'A ''. Если вы делаете 'LIKE '% []]%'', то это означает, что «соответствует одному символу в этом пустом наборе символов, за которым следует символ'] '. Поскольку набор пуст, символ не может совпадать. –