O SQL Server deixa escapar um sublinhado


338

Como escapar do caractere sublinhado?

Estou escrevendo algo como a seguinte cláusula where e quero encontrar entradas reais com _d no final.

Where Username Like '%_d'

Respostas:


523

Referência T-SQL para LIKE :

Você pode usar os caracteres correspondentes do padrão curinga como caracteres literais. Para usar um caractere curinga como literal, coloque-o entre colchetes. A tabela a seguir mostra vários exemplos de uso da palavra-chave LIKE e dos caracteres curinga [].

Para o seu caso:

... LIKE '%[_]d'

Oh cara! ... se ainda não funcionar, verifique se a coluna está correta.
Jens Frandsen

198

Obviamente, a solução @Lasse está certa, mas há outra maneira de resolver seu problema: o operador T-SQL LIKEdefine o ESCAPE opcional cláusula , que permite declarar um caractere que escapará do próximo caractere para o padrão.

Para o seu caso, as seguintes cláusulas WHERE são equivalentes:

WHERE username LIKE '%[_]d';            -- @Lasse solution
WHERE username LIKE '%$_d' ESCAPE '$';
WHERE username LIKE '%^_d' ESCAPE '^';

42
Para concluir: a ESCAPEcláusula faz parte do padrão SQL e funcionará em qualquer DBMS, não apenas no SQL Server.
a_horse_with_no_name

2

Essas soluções fazem totalmente sentido. Infelizmente, nem funcionou para mim como esperado. Em vez de tentar me incomodar com isso, resolvi:

select * from information_schema.columns 
where replace(table_name,'_','!') not like '%!%'
order by table_name


0

Nada disso funcionou para mim no SSIS v18.0, portanto, eu faria algo assim:

WHERE CHARINDEX('_', thingyoursearching) < 1

.. Onde estou tentando ignorar seqüências de caracteres com um sublinhado nelas. Se você deseja encontrar itens com sublinhado, basta girá-lo:

WHERE CHARINDEX('_', thingyoursearching) > 0

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.