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.


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%'

42

Essayez la requête suivante

select * from table
where NOT (tester = 'username')

20

La condition NULL-safe ressemblerait à:

select * from table
where NOT (tester <=> 'username')

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


7

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

 SELECT * from table WHERE Strcmp(user, testername) <> 0;

1

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

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.