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