192 votes

Requête SQL Where Field NE Contient PAS $x

Je veux trouver une requête SQL pour trouver les lignes où le champ1 ne contient pas $x. Comment puis-je faire cela ?

0 votes

Est-ce que je peux utiliser la fonction CONTAINS() (sql) pour faire la même vérification?

375voto

Vegard Larsen Points 4850

Quel type de champ est-ce ? L'opérateur IN ne peut pas être utilisé avec un seul champ, mais est destiné à être utilisé dans des sous-requêtes ou avec des listes prédéfinies :

-- sous-requête
SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y);
-- liste prédéfinie
SELECT a FROM x WHERE x.b NOT IN (1, 2, 3, 6);

Si vous recherchez une chaîne de caractères, utilisez l'opérateur LIKE (mais cela sera lent) :

-- Trouve toutes les lignes où a ne contient pas "texte"
SELECT * FROM x WHERE x.a NOT LIKE '%texte%';

Si vous restreignez la recherche pour que la chaîne que vous recherchez doit commencer par la chaîne donnée, elle peut utiliser des indices (s'il y a un index sur ce champ) et être raisonnablement rapide :

-- Trouve toutes les lignes où a ne commence pas par "texte"
SELECT * FROM x WHERE x.a NOT LIKE 'texte%';

2 votes

Qu'est-ce que x.b? Vos lettres sont très très déroutantes. Je recommande d'utiliser un tableau ou un champ.

0 votes

Assurez-vous que si vous utilisez une sous-requête pour NOT IN aucun des valeurs ne seront NULL, car NOT IN et NULL ne se combinent pas de manière évidente si vous n'êtes pas familier avec la logique à trois valeurs. Ici, vous utiliseriez SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL); Si vous avez également besoin d'exclure les valeurs NULL, vous devrez faire ceci : SELECT a FROM x WHERE x.b NOT IN (SELECT b FROM y WHERE b IS NOT NULL) AND x.b IS NOT NULL;

29voto

Greg Points 132247

SÉLECTIONNER * FROM table WHERE field1 NOT LIKE '%$x%'; (Assurez-vous d'échapper correctement $x à l'avance pour éviter les injections SQL)

Modifier : NOT IN fait quelque chose d'un peu différent - votre question n'est pas totalement claire alors choisissez celui à utiliser. LIKE 'xxx%' peut utiliser un index. LIKE '%xxx' ou LIKE '%xxx%' ne peuvent pas.

0 votes

Qu'est-ce qui est considéré comme un échappement correct ? Je sais qu'avec des chaînes normales, vous devez seulement échapper à quelques choses, mais LIKE a quelques caractères spéciaux supplémentaires.

-1voto

user3441182 Points 1

Méthode alternative :

SELECT * FROM x WHERE CHARINDEX('$x', field1, 0)<1 

Explication : Il recherche les occurrences de '$x' à partir de la position 0. Et sélectionne uniquement lorsque le nombre est 'inférieur à un'.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X