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.

Dan Ciborowski - MSFT
źródło
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%'
Gordon Linoff
źródło
42

Spróbuj wykonać następujące zapytanie

select * from table
where NOT (tester = 'username')
Chris
źródło
20

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

select * from table
where NOT (tester <=> 'username')
Viktor Zeman
źródło
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
8
select * from table
where tester NOT LIKE '%username%';
Ömer Faruk Almalı
źródło
7

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

 SELECT * from table WHERE Strcmp(user, testername) <> 0;
user3088463
źródło
1

Inny sposób uzyskania wyników

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
karthik kasubha
źródło