Pesquisar por linhas com caracteres especiais no SQL Server
Ao solucionar problemas de programação hoje, notei que você não pode usar uma pesquisa LIKE para colunas de strings 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 nome da tabela WHERE fieldname LIKE '% 100 %%'
Em vez do que você queria, você obterá todas as linhas que contêm "100", bem como as 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 escapar deles.
Escape de suporte quadrado
Você pode cercar o% ou _ com colchetes para informar ao SQL Server que o caractere interno é um caractere regular.
SELECT * FROM nome da tabela 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 nome da tabela WHERE nome do campo LIKE '% 100 \ %%' ESCAPE '\'
A parte ESCAPE '\' da consulta diz ao mecanismo SQL para interpretar o caractere após o \ como um caractere literal em vez de um curinga.
Pessoalmente eu acho o segundo método mais fácil de lidar, e você pode usá-lo para escapar de um colchete bem.