Подтвердить что ты не робот

SQL Server LIKE, содержащий символы скобок

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

sampleData (nvarchar(max))

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

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

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

SELECT * from sampleTable where sampleData like '[%'

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

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

4b9b3361

Ответ 1

 ... like '[[]%'

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

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

Изменить, 24.11.2011

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

Ответ 2

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

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

Подробнее см. .

Ответ 3

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

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

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

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

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

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

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

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