Consulta SQL donde el campo NO contiene $ x


132

Quiero encontrar una consulta SQL para buscar filas donde field1 no contenga $ x. ¿Cómo puedo hacer esto?


¿Puedo usar la función CONTAINS () (sql) para hacer la misma verificación?
Kate

Respuestas:


291

¿Qué tipo de campo es este? El operador IN no se puede usar con un solo campo, pero está destinado a usarse en subconsultas o con 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);

Si está buscando una cadena, busque el operador LIKE (pero esto será lento):

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

Si lo restringe para que la cadena que está buscando tenga que comenzar con la cadena dada, puede usar índices (si hay un índice en ese campo) y ser razonablemente rápido:

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

1
que es xb Tus cartas son muy muy confusas. Recomiendo usar tabla o campo.
Whitecat

Asegúrese de que si usa una subconsulta para NOT INque ninguno de los valores sea NULL, ya que NOT IN y NULL no se combinan de manera obvia si no está familiarizado con la lógica de tres valores. Aquí usaría SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Si también necesita excluir valores NULL, necesitaría hacer esto: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%'; (Asegúrese de escapar $ x correctamente de antemano para evitar la inyección de SQL)

Editar: NOT INhace algo un poco diferente: su pregunta no está totalmente clara, así que elija cuál usar. LIKE 'xxx%'puede usar un índice. LIKE '%xxx'o LIKE '%xxx%'no puedo


¿Qué se considera escapar adecuadamente? Sé que con las cuerdas normales solo tienes que escapar de algunas cosas, pero LIKE tiene algunos caracteres especiales adicionales.
Pieter Bos
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.