Ответ 1
LIKE 'WC[[]R]S123456'
или
LIKE 'WC\[R]S123456' ESCAPE '\'
Должен работать.
Я пытаюсь фильтровать элементы с помощью хранимой процедуры, используя, например. Столбец является varchar (15). Элементы, которые я пытаюсь фильтровать, имеют квадратные скобки в имени.
Например: WC[R]S123456
.
Если я делаю LIKE 'WC[R]S123456'
, он ничего не вернет.
Я нашел некоторую информацию об использовании ключевого слова ESCAPE
с LIKE
, но я не понимаю, как использовать его для обработки квадратных скобок как регулярной строки.
LIKE 'WC[[]R]S123456'
или
LIKE 'WC\[R]S123456' ESCAPE '\'
Должен работать.
Предположим, вы хотите совместить литерал its[brac]et
.
Вам не нужно избегать ]
, поскольку оно имеет особое значение только в том случае, если оно сопряжено с [
.
Поэтому для решения проблемы достаточно избежать [
. Вы можете выйти из [
, заменив его на [[]
.
Мне нужно было исключить имена, которые начинались с подчеркивания из запроса, поэтому я закончил с этим:
WHERE b.[name] not like '\_%' escape '\' -- use \ as the escape character
Вот что я на самом деле использовал:
like 'WC![R]S123456' ESCAPE '!'
Ключевое слово 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 '\'
Вместо "\" или другого символа на клавиатуре вы также можете использовать специальные символы, которые не находятся на клавиатуре. В зависимости от вашего варианта использования это может потребоваться, если вы не хотите, чтобы пользовательский ввод случайно использовался как escape-символ.
Если вам нужно избежать специальных символов, таких как '_' (подчеркивание), как это было в моем случае, и вы не хотите/не можете определить условие ESCAPE, вы можете пожелать чтобы заключить специальный символ с квадратными скобками '[' и ']'.
Это объясняет значение "странной" строки '[[]' - она просто охватывает символ '[' с квадратными скобками, эффективно ускоряя его.
Мой вариант использования заключался в том, чтобы указать имя хранимой процедуры с подчеркиванием в ней в качестве критерия фильтра для Profiler. Поэтому я ввел строку '% name [_] of [_] a [_] сохраненную процедуру _ _%% в поле TextData LIKE, и это дало мне результаты трассировки, которые я хотел достичь.
Вот хороший пример из документации: LIKE (Transact-SQL) - использование символов подстановочных знаков в виде литералов
Согласно документация:
Вы можете использовать шаблоны соответствия шаблонов в виде букв персонажи. Чтобы использовать подстановочный знак как буквенный символ, вставьте скобки в скобки.
Вам нужно избежать этих трех символов %_[
:
'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