use - wildcard select sql




NÃO GOSTO e GOSTO de não retornar resultado oposto (4)

  1. Select * from tbl1 
    WHERE ([TextCol] NOT LIKE '%TAX%') AND ([TextCol] NOT LIKE '%TAX%')
  2. select * from tbl1
    where [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

Eu tenho uma tabela com 200 registros, dos quais 10 registros possuem texto contendo a palavra 'TAX'.

Quando estou executando

Select * from tbl1 WHERE [TextCol] LIKE '%TAX%'

então eu recebo o conjunto de resultados com esses 10 registros corretamente.

Mas quando estou tentando excluir esses registros por

Select * from tbl1 WHERE [TextCol] NOT LIKE '%TAX%'

está retornando apenas 100 registros, em vez de 190.


Aconteceu comigo uma vez também! depois de quebrar a cabeça, descobri que era por causa de valores nulos, então você pode usar esta consulta para evitá-la:

WHERE CASE WHEN [TextCol] IS NULL
           THEN 'default' 
           ELSE [TextCol] 
      END NOT LIKE '%TAX%'

Isso retorna o resultado correto?

Select * from tbl1 WHERE COALESCE([TextCol],'-1') NOT LIKE '%TAX%'

Acredito que os valores NULL sejam o problema aqui. Se a coluna os contiver, NULL NOT LIKE '%TAX%' retornará UNKNOWN/NULL e, portanto, não será selecionado.

Eu aconselho você a ler sobre como lidar com valores NULL , ou here .

Como o @ughai sugeriu, se o desempenho for um problema, você também poderá usar:

  Select * from tbl1 
  WHERE [TextCol] NOT LIKE '%TAX%'
     OR [TextCol] IS NULL

Você também precisa verificar os valores NULL:

    [TextCol] NOT LIKE '%TAX%' OR [TextCol] IS NULL

Isso deve cuidar dos valores nulos também, e é provavelmente por isso que você não obteve todas as linhas na saída.





sql-like