SQL: comment effectuer une chaîne n'est pas égal

114

J'ai la question suivante

SELECT * FROM table
WHERE tester <> 'username';

Je m'attends à ce que cela renvoie tous les résultats où le testeur n'est pas la chaîne username, mais cela ne fonctionne pas. Je pense que je cherche l'inverse de l' Likeopérateur mais je ne suis pas sûr? Dans mes recherches, j'ai trouvé des solutions pour les nombres (c'est de là que j'ai obtenu <>), mais cela ne semble pas fonctionner avec des chaînes.

Dan Ciborowski - MSFT
la source
5
Les valeurs que vous rencontrez ont-elles des problèmes avec les NULLvaleurs? ( NULL <> 'username' => NULL=> faux)?
Wrikken

Réponses:

174

Votre whereclause renverra toutes les lignes où testerne correspond pas usernameET où testern'est pas nul.

Si vous souhaitez inclure des valeurs NULL, essayez:

where tester <> 'username' or tester is null

Si vous recherchez des chaînes qui ne contiennent pas le mot «nom d’utilisateur» comme sous-chaîne, elles likepeuvent être utilisées:

where tester not like '%username%'
Gordon Linoff
la source
42

Essayez la requête suivante

select * from table
where NOT (tester = 'username')
Chris
la source
20

La condition NULL-safe ressemblerait à:

select * from table
where NOT (tester <=> 'username')
Viktor Zeman
la source
Oui !, c'est la seule chose qui fonctionne pour moi, car j'ai une chaîne de et. Je ne connaissais pas l'opérateur <=>. Merci!
varta
Je viens de remarquer que l' <=>opérateur n'existe que dans le MySQLmonde, pour plus d'infos voir ce que c'est <=>
Top-Master
8
select * from table
where tester NOT LIKE '%username%';
Ömer Faruk Almalı
la source
7

La strcompfonction peut être appropriée ici (renvoie 0 lorsque les chaînes sont identiques):

 SELECT * from table WHERE Strcmp(user, testername) <> 0;
user3088463
la source
1

Une autre façon d'obtenir les résultats

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
karthik kasubha
la source