Sqlserver
 sql >> Base de Dados >  >> RDS >> Sqlserver

Por que usar um caractere de sublinhado em um filtro LIKE me dá todos os resultados?


Modifique seu WHERE condição assim:
WHERE mycolumn LIKE '%\_%' ESCAPE '\'

Essa é uma das maneiras pelas quais o Oracle oferece suporte a caracteres de escape. Aqui você define o caractere de escape com o escape palavra-chave. Para obter detalhes, consulte este link no Oracle Docs.

O '_' e '%' são curingas em um LIKE instrução operada em SQL.

O _ caractere procura a presença de (qualquer) um único caractere. Se você pesquisar por columnName LIKE '_abc' , ele fornecerá um resultado com linhas com 'aabc' , 'xabc' , '1abc' , '#abc' mas NÃO 'abc' , 'abcc' , 'xabcd' e assim por diante.

O '%' caractere é usado para corresponder a 0 ou mais números de caracteres. Isso significa que, se você pesquisar por columnName LIKE '%abc' , ele lhe dará um resultado com 'abc' , 'aabc' , 'xyzabc' e assim por diante, mas não 'xyzabcd' , 'xabcdd' e qualquer outra string que não termine com 'abc' .

No seu caso, você pesquisou por '%_%' . Isso fornecerá todas as linhas com essa coluna com um ou mais caracteres, ou seja, qualquer caractere, como valor. É por isso que você está obtendo todas as linhas, mesmo que não haja _ nos valores de sua coluna.