SQL Server LIKE, содержащий символы скобок
Использование SQL Server 2008. У меня есть таблица со следующим столбцом:
sampleData (nvarchar(max))
Значение для этого столбца в некоторых из этих строк - это списки, отформатированные следующим образом:
["value1","value2","value3"]
Я пытаюсь написать простой запрос, который вернет все строки со списками, отформатированными таким образом, просто определив открывающий скобок.
SELECT * from sampleTable where sampleData like '[%'
Вышеприведенный запрос не работает, потому что "[" является специальным символом, и я не могу на всю жизнь понять, как избежать скобки, поэтому мой запрос делает то, что я хочу.
Спасибо за любые предложения!
Ответы
Ответ 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, позволяют нам избежать их в функциональных скобках, указывающих набор символов.
Извините за немой пример, но надеюсь, что это поможет кому-то