Как я могу избежать квадратных скобок в предложении LIKE?

Я пытаюсь фильтровать элементы с помощью хранимой процедуры, используя, например. Столбец является varchar (15). Элементы, которые я пытаюсь фильтровать, имеют квадратные скобки в имени.

Например: WC[R]S123456.

Если я делаю LIKE 'WC[R]S123456', он ничего не вернет.

Я нашел некоторую информацию об использовании ключевого слова ESCAPE с LIKE, но я не понимаю, как использовать его для обработки квадратных скобок как регулярной строки.

Ответ 1

LIKE 'WC[[]R]S123456' 

или

LIKE 'WC\[R]S123456' ESCAPE '\'

Должен работать.

Ответ 2

Предположим, вы хотите совместить литерал its[brac]et.

Вам не нужно избегать ], поскольку оно имеет особое значение только в том случае, если оно сопряжено с [.

Поэтому для решения проблемы достаточно избежать [. Вы можете выйти из [, заменив его на [[].

Ответ 3

Мне нужно было исключить имена, которые начинались с подчеркивания из запроса, поэтому я закончил с этим:

WHERE b.[name] not like '\_%' escape '\'  -- use \ as the escape character

Ответ 4

Вот что я на самом деле использовал:

like 'WC![R]S123456' ESCAPE '!'

Ответ 5

Ключевое слово ESCAPE используется, если вам нужно искать специальные символы, такие как% и _, которые обычно являются дикими. Если вы укажете ESCAPE, SQL будет искать буквально для символов% и _.

Вот хорошая статья с несколькими примерами

SELECT columns FROM table WHERE 
    column LIKE '%[[]SQL Server Driver]%' 

-- or 

SELECT columns FROM table WHERE 
    column LIKE '%\[SQL Server Driver]%' ESCAPE '\'

Ответ 6

Вместо "\" или другого символа на клавиатуре вы также можете использовать специальные символы, которые не находятся на клавиатуре. В зависимости от вашего варианта использования это может потребоваться, если вы не хотите, чтобы пользовательский ввод случайно использовался как escape-символ.

Ответ 7

Если вам нужно избежать специальных символов, таких как '_' (подчеркивание), как это было в моем случае, и вы не хотите/не можете определить условие ESCAPE, вы можете пожелать чтобы заключить специальный символ с квадратными скобками '[' и ']'.

Это объясняет значение "странной" строки '[[]' - она ​​просто охватывает символ '[' с квадратными скобками, эффективно ускоряя его.

Мой вариант использования заключался в том, чтобы указать имя хранимой процедуры с подчеркиванием в ней в качестве критерия фильтра для Profiler. Поэтому я ввел строку '% name [_] of [_] a [_] сохраненную процедуру _ _%% в поле TextData LIKE, и это дало мне результаты трассировки, которые я хотел достичь.

Вот хороший пример из документации: LIKE (Transact-SQL) - использование символов подстановочных знаков в виде литералов

Ответ 8

Согласно документация:

Вы можете использовать шаблоны соответствия шаблонов в виде букв персонажи. Чтобы использовать подстановочный знак как буквенный символ, вставьте скобки в скобки.

Вам нужно избежать этих трех символов %_[:

'5%'      LIKE '5[%]'      -- true
'5$'      LIKE '5[%]'      -- false
'foo_bar' LIKE 'foo[_]bar' -- true
'foo$bar' LIKE 'foo[_]bar' -- false
'foo[bar' LIKE 'foo[[]bar' -- true
'foo]bar' LIKE 'foo]bar'   -- true