Поиск строк со специальными символами в SQL Server
При устранении проблем с программированием сегодня я заметил, что вы не можете использовать LIKE-поиск для строковых столбцов, содержащих специальные символы, такие как% или _, без использования специального синтаксиса. Выяснение проблемы заняло всего несколько минут, но запомнить синтаксис всегда проще, если вы напишите об этом.
Так что да, этот пост предназначен исключительно для моей пользы. Надеюсь, это поможет кому-то еще.
Допустим, вы хотите найти любые поля, содержащие текст «100%», поэтому вы собрали этот запрос:
SELECT * FROM tablename, ГДЕ имя поля LIKE "% 100 %%"
Вместо того, что вы хотели, вы получите все строки, которые содержат «100», а также строки, которые содержат «100%».
Проблема здесь в том, что SQL Server использует знак процента, подчеркивание и квадратные скобки в качестве специальных символов. Вы просто не можете использовать их в качестве простого символа в запросе LIKE, не избегая их.
Квадратный кронштейн Escape
Вы можете заключить% или _ в квадратные скобки, чтобы сообщить SQL Server, что символ внутри является обычным.
SELECT * FROM tablename ГДЕ имя поля LIKE '% 100 [%]%'
Синтаксис T-SQL ESCAPE
Кроме того, вы можете добавить оператор ESCAPE к вашему запросу и добавить символ \ перед значением, которое вы хотите экранировать.
SELECT * FROM tablename, ГДЕ имя поля LIKE '% 100 \ %%' ESCAPE '\'
Часть запроса ESCAPE '\' указывает механизму SQL интерпретировать символ после \ как буквенный символ, а не как подстановочный знак.
Лично я нахожу, что второй метод проще в использовании, и вы также можете использовать его, чтобы избежать квадратной скобки.