2013-05-01 14 views
64

Mam następujące zapytanieSQL: Jak wykonać ciąg nie równa

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

Oczekuję tego, aby powrócić wszystkie wyniki gdzie tester nie jest ciąg username, ale to nie działa. Myślę, że szukam odwrotności operatora Like, ale nie jestem pewien? W moich poszukiwaniach znalazłem rozwiązania dla liczb (to jest, gdzie dostałem <> od), ale wydaje się, że nie działają z ciągami.

+4

Czy wartości, masz problemy z 'NULL' wartości? ('NULL <> 'username'' =>' NULL' => false)? – Wrikken

Odpowiedz

102

Twój where klauzula zwróci wszystkie wiersze gdzie tester nie pasuje username i gdzie tester nie jest null.

Jeśli chcesz zawierać wartości null, spróbuj:

where tester <> 'username' or tester is null 

Jeśli szukasz ciągi, które nie zawierają słowo „nazwę użytkownika” jako podciąg, następnie like można stosować:

where tester not like '%username%' 
+0

Czy możesz uzyskać poradę dotyczącą tego problemu https://stackoverflow.com/questions/47549379/how-to-compare-varchar-fields-in-mysql – davidb

+0

DZIAŁA. to działa! – YumYumYum

25

Spróbuj następujące zapytanie

select * from table 
where NOT (tester = 'username') 
5
select * from table 
where tester NOT LIKE '%username%'; 
5

Funkcja strcomp mogą być odpowiednie tutaj (zwraca 0, gdy ciągi są identyczne):

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

NULL bezpieczny stan to wygląda następująco:

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