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


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

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

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

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

9 181

9 ответов:

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 '\'

по данным документация:

шаблон можно использовать подстановочные символы как литерал письмена. Использование подстановочного знака в качестве литерального символа, заключите подстановочный знак в квадратные скобки.

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

'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 'ð'

и так далее для других шаблонов. Но прямой пользовательский ввод должен быть отформатирован, как указано выше.