SQL Server LIKE, содержащий символы в скобках - PullRequest
49 голосов
/ 07 сентября 2010

Использование SQL Server 2008. У меня есть таблица со следующим столбцом:

sampleData (nvarchar(max))

Значением этого столбца в некоторых из этих строк являются списки, отформатированные следующим образом:

["value1","value2","value3"]

Я пытаюсь написать простой запрос, который будет возвращать все строки со списками, отформатированными следующим образом, просто определяя открывающую скобку.

SELECT * from sampleTable where sampleData like '[%'

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

Спасибо за любые предложения!

Ответы [ 3 ]

77 голосов
/ 07 сентября 2010
 ... like '[[]%'

Вы используете [ ] для окружения специального символа (или диапазона)

См. Раздел «Использование подстановочных знаков в качестве литералов» в SQL Server LIKE

Редактировать, 24 ноября 2011

Примечание: вам не нужно выходить из закрывающей скобки ...

27 голосов
/ 07 сентября 2010

Помимо ответа gbn, другой метод заключается в использовании опции ESCAPE:

SELECT * from sampleTable where sampleData like '\[%' ESCAPE '\'

Подробнее см. документацию

3 голосов
/ 02 июня 2015

Просто еще одна заметка здесь ... Если вы хотите включить скобки (или другие специальные предложения) в набор символов, у вас есть только возможность использовать ESCAPE (так как вы уже используете скобки, чтобы указать набор),Также вы ДОЛЖНЫ указать предложение ESCAPE, поскольку по умолчанию не существует escape-символа (по умолчанию, как я впервые подумал, это не обратная косая черта, исходящая из фона C).

например, если я хочу вытащить строки, гдестолбец содержит что-либо вне набора «приемлемых» символов, для аргумента, скажем, буквенно-цифровых символов ... мы могли бы начать с этого

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9]%'

Таким образом, мы возвращаем все, что имеет какой-либо символ не всписок (из-за начального символа ^).

Если затем мы хотим добавить специальные символы в этот набор допустимых символов, мы не можем вложить скобки, поэтому мы должны использовать escape-символ, например так ...

SELECT * FROM MyTest WHERE MyCol LIKE '%[^a-zA-Z0-9\[\]]%' ESCAPE '\'

Предварение скобок (по отдельности) обратной косой чертой и указание на то, что мы используем обратную косую черту для escape-символа, позволяет нам экранировать их в действующих скобках, указывающих набор символов.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...