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.


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

41

Versuchen Sie die folgende Abfrage

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

19

NULL-sicherer Zustand würde aussehen wie:

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

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


7

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

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

1

Ein anderer Weg, um die Ergebnisse zu erhalten

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.