Я пытаюсь фильтровать элементы с помощью хранимой процедуры, используя как. Колонна - это вархар (15). Пункты, которые я пытаюсь отфильтровать, имеют квадратные скобки в названии.
Например: WC[R]S123456
.
Если я сделаю это, LIKE 'WC[R]S123456'
он ничего не вернет.
Я нашел некоторую информацию об использовании ESCAPE
ключевого слова с, LIKE
но я не понимаю, как использовать его, чтобы рассматривать квадратные скобки как обычную строку.
LIKE '[fz]oo'
будет соответствовать как 'Foo' и 'Zoo'.LIKE 'WC\[R]S123456' ESCAPE '\'
как это более читабельно для обслуживания.Допустим, вы хотите соответствовать буквальному
its[brac]et
.Вам не нужно избегать,
]
поскольку это имеет особое значение, только когда оно в паре с[
.Поэтому побега
[
достаточно для решения проблемы. Вы можете убежать[
, заменив его на[[]
.источник
[[]
выглядит странно, но это имеет смысл, когда вы смотрите на это с точки зрения парсера. У парсера есть определенное правило для обработки символов между ними[ ]
. Таким образом, текстits[brac]et
означает: «Найти следующие последовательные строки:,its
(применить правило для квадратных скобок:)brac
,et
» . С другой стороны,its[[]brac]et
означает: «Найти следующие последовательные строки:,its
(применить правило для квадратных скобок:)[
,brac]et
» .Мне нужно было исключить имена, начинающиеся со знака подчеркивания, из запроса, поэтому я получил следующее:
источник
Вот что я на самом деле использовал:
источник
Ключевое слово ESCAPE используется, если вам нужно искать специальные символы, такие как% и _, которые обычно являются символами подстановки. Если вы укажете ESCAPE, SQL будет искать буквально символы% и _.
Вот хорошая статья с еще несколькими примерами
источник
Если вам нужно экранировать специальные символы, такие как '_' (подчеркивание), как это было в моем случае, и вы не хотите / не можете определить предложение ESCAPE, вы можете заключить специальный символ в квадратные скобки '[ ' и '] ' .
Это объясняет значение «странной» строки '[[]' - она просто заключает символ '[' в квадратные скобки, эффективно экранируя его.
Мой вариант использования состоял в том, чтобы указать имя хранимой процедуры с подчеркиванием в ней в качестве критерия фильтра для Профилировщика. Поэтому я поместил строку «% name [_] of [_] a [_] хранимую [_] процедуру%» в поле TextData LIKE, и он дал мне результаты трассировки, которых я хотел достичь.
Вот хороший пример из документации: LIKE (Transact-SQL) - использование подстановочных знаков в качестве литералов
источник
Согласно документации :
Вам нужно убежать от этих трех персонажей
%_[
:источник
Вместо '\' или другого символа на клавиатуре вы также можете использовать специальные символы, которых нет на клавиатуре. В зависимости от вашего варианта использования это может быть необходимо, если вы не хотите, чтобы пользовательский ввод случайно использовался в качестве escape-символа.
источник
¬
- это все еще клавиатурный персонаж в Великобритании, но редко используется сознательно :) (вверху слева междуEsc
иTab
)Используйте следующее.
Чтобы пользовательский ввод выполнялся как есть, используйте escape, так как он потребует следующей замены всех специальных символов (ниже охватывает все SQL Server).
Здесь одинарная кавычка "'" не берется, поскольку она не влияет на подобное предложение, так как речь идет о конкатенации строк.
"-" & "^" & "]" замена не требуется, поскольку мы экранируем "[".
Тогда в SQL Query это должно быть следующим. (В параметризованном запросе строка может быть добавлена с шаблонами после замены выше).
Для поиска точной строки.
Для поиска начните со строки
Чтобы поиск заканчивался строкой
Для поиска содержать со строкой
и так далее для другого сопоставления с образцом. Но прямой пользовательский ввод необходимо отформатировать, как указано выше.
источник
В этом есть проблема:
и:
Оба работают для SQL Server, но ни один не работает для Oracle.
Похоже, что в ISO / IEC 9075 нет способа распознать шаблон с левой скобой.
источник