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'
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:
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'
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 '^';
ESCAPEcláusula faz parte do padrão SQL e funcionará em qualquer DBMS, não apenas no SQL Server.
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
Isso funcionou para mim, basta usar a fuga
'%\_%'
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