Consulta SQL em que o campo NÃO contém $ x

132

Eu quero encontrar uma consulta SQL para encontrar linhas em que o campo1 não contém $ x. Como posso fazer isso?

zuk1
fonte
Posso usar a função CONTAINS () (sql) para fazer a mesma verificação?
Kate

Respostas:

291

Que tipo de campo é esse? O operador IN não pode ser usado com um único campo, mas deve ser usado em subconsultas ou em listas predefinidas:

-- subquery
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- predefined list
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

Se você estiver procurando uma string, vá para o operador LIKE (mas isso será lento):

-- Finds all rows where a does not contain "text"
SELECT * FROM x WHERE x.a NOT LIKE '%text%';

Se você a restringir para que a sequência que você está procurando tenha que começar com a sequência especificada, ela poderá usar índices (se houver um índice nesse campo) e ser razoavelmente rápida:

-- Finds all rows where a does not start with "text"
SELECT * FROM x WHERE x.a NOT LIKE 'text%';
Vegard Larsen
fonte
1
o que é xb? suas cartas são muito, muito confusas. Eu recomendo usar tabela ou campo.
WhiteCat
Certifique-se de que, se você usar uma subconsulta, NOT INnenhum dos valores será NULL, pois NOT IN e NULL não serão combinados de maneira óbvia se você não estiver familiarizado com a lógica de três valores. Aqui você usaria SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Se você também precisa de excluir valores NULL, você precisa fazer isso:SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;
Bacon Bits
17

SELECT * FROM table WHERE field1 NOT LIKE '%$x%'; (Certifique-se de escapar $ x corretamente corretamente para evitar a injeção de SQL)

Editar: NOT INfaz algo um pouco diferente - sua pergunta não é totalmente clara, então escolha qual usar. LIKE 'xxx%'pode usar um índice. LIKE '%xxx'ou LIKE '%xxx%'não pode.

Greg
fonte
O que é considerado escapar corretamente? Eu sei que com cordas normais você só precisa escapar de algumas coisas, mas o LIKE tem alguns caracteres especiais extras.
Pieter Bos