Ao solucionar um problema de programação hoje, percebi que você não pode usar uma pesquisa LIKE para colunas de string contendo caracteres especiais como% ou _ sem usar uma sintaxe especial. Descobrir o problema levou apenas alguns minutos, mas lembrar a sintaxe é sempre mais fácil se você escrever sobre isso.
Então, sim, este post é apenas para o meu benefício. Espero que ajude alguém também.
Digamos que você queira encontrar todos os campos que contenham o texto "100%", para que você faça essa consulta:
SELECT * FROM tablename WHERE fieldname LIKE ‘%100%%’
Em vez do que você queria, você verá todas as linhas que contêm "100", além das linhas que contêm "100%".
O problema aqui é que o SQL Server usa o sinal de porcentagem, sublinhado e colchetes como caracteres especiais. Você simplesmente não pode usá-los como um caractere simples em uma consulta LIKE sem evitá-los.
Escape de suporte quadrado
Você pode cercar o% ou _ com colchetes para informar ao SQL Server que o caractere interno é um caractere normal.
SELECT * FROM tablename WHERE fieldname LIKE ‘%100[%]%’
Sintaxe ESCAPE T-SQL
Como alternativa, você pode anexar o operador ESCAPE à sua consulta e adicionar um caractere antes do valor que deseja escapar.
SELECT * FROM tablename WHERE fieldname LIKE ‘%100\%%’ ESCAPE ‘’
A parte ESCAPE "" da consulta informa ao mecanismo SQL para interpretar o caractere após o caractere como literal e não como curinga.
Pessoalmente eu acho o segundo método mais fácil de lidar, e você pode usá-lo para escapar de um colchete também.