SQL: Jak wykonać ciąg nie równa się


114

Mam następujące zapytanie

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

Oczekuję, że to zwróci wszystkie wyniki, w których tester nie jest ciągiem username, ale to nie działa. Myślę, że szukam odwrotności Likeoperatora, ale nie jestem pewien? W moich poszukiwaniach znalazłem rozwiązania dla liczb (stąd mam <>), ale wydaje się, że nie działa to ze stringami.


5
Czy wartości, z którymi masz problemy, dotyczą NULLwartości? ( NULL <> 'username' => NULL=> fałsz)?
Wrikken

Odpowiedzi:


174

Twoja whereklauzula zwróci wszystkie wiersze, w których testernie pasuje usernameI gdzie testernie jest null.

Jeśli chcesz dołączyć wartości NULL, spróbuj:

where tester <> 'username' or tester is null

Jeśli szukasz ciągów, które nie zawierają słowa „nazwa użytkownika” jako podłańcucha, likemożesz użyć:

where tester not like '%username%'

42

Spróbuj wykonać następujące zapytanie

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

20

Stan NULL-bezpieczny wyglądałby następująco:

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

Tak !, to jedyna rzecz, która działa na mnie, ponieważ mam łańcuch i. Nie znałam operatora <=>. Dzięki!
varta,

Właśnie zauważyłem, że <=>operator istnieje tylko na MySQLświecie, po więcej informacji zobacz co to jest <=>
Top-Master


7

strcompFunkcja może być tutaj odpowiednie (zwraca 0, gdy ciągi są identyczne):

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

1

Inny sposób uzyskania wyników

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.