SQL: Die Ausführung eines Strings ist nicht gleich

114

Ich habe die folgende Frage

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

Ich erwarte, dass dies alle Ergebnisse zurückgibt, bei denen der Tester nicht die Zeichenfolge ist username, aber dies funktioniert nicht. Ich glaube, ich suche die Umkehrung des LikeOperators, bin mir aber nicht sicher? Bei meinen Suchen habe ich Lösungen für Zahlen gefunden (von dort habe ich <> erhalten), aber dies scheint nicht mit Zeichenfolgen zu funktionieren.

Dan Ciborowski - MSFT
quelle
5
Haben die Werte Probleme mit NULLWerten? ( NULL <> 'username' => NULL=> falsch)?
Wrikken

Antworten:

172

Ihre whereKlausel gibt alle Zeilen zurück, in denen testernicht übereinstimmt usernameUND in denen testernicht null ist.

Wenn Sie NULL-Werte einschließen möchten, versuchen Sie:

where tester <> 'username' or tester is null

Wenn Sie nach Zeichenfolgen suchen, die das Wort "Benutzername" nicht als Teilzeichenfolge enthalten, likekönnen Sie Folgendes verwenden:

where tester not like '%username%'
Gordon Linoff
quelle
41

Versuchen Sie die folgende Abfrage

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

NULL-sicherer Zustand würde aussehen wie:

select * from table
where NOT (tester <=> 'username')
Viktor Zeman
quelle
Ja!, Das ist das einzige, was für mich funktioniert, weil ich eine Kette von und habe. Ich kannte den Operator <=> nicht. Vielen Dank!
Varta
Ich habe gerade bemerkt, dass der <=>Operator nur auf der MySQLWelt existiert. Weitere Informationen finden Sie unter <=>
Top-Master
8
select * from table
where tester NOT LIKE '%username%';
Ömer Faruk Almalı
quelle
7

Die strcompFunktion kann hier angemessen sein (gibt 0 zurück, wenn die Zeichenfolgen identisch sind):

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

Ein anderer Weg, um die Ergebnisse zu erhalten

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