SQL: як виконати рядок, не дорівнює


114

У мене є наступний запит

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

Я очікую, що це поверне всі результати, коли тестер не є рядком username, але це не працює. Я думаю, що я шукаю зворотну частину Likeоператора, але не впевнений? У своїх пошуках я знайшов рішення для чисел (саме звідки я дістався <> від), але це, здається, не працює з рядками.


5
Чи є у вас NULLзначення зі значеннями? ( NULL <> 'username' => NULL=> помилково)?
Wrikken

Відповіді:


174

Ваш whereпункт поверне всі рядки, де testerне збігається usernameІ де testerне є нульовим.

Якщо ви хочете включити NULL, спробуйте:

where tester <> 'username' or tester is null

Якщо ви шукаєте рядки, які не містять слово "ім'я користувача" як підрядку, тоді likeможна використовувати:

where tester not like '%username%'

42

Спробуйте наступний запит

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

20

Стан безпечного для NULL виглядає так:

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

Так !, це єдине, що працює для мене, тому що у мене є ланцюг і. Не знав оператора <=>. Дякую!
Варта

Щойно помітив, що <=>оператор існує лише у MySQLсвіті, щоб отримати докладнішу інформацію, що є <=>
Top-Master


7

Тут strcompможе бути відповідна функція (повертає 0, коли рядки однакові):

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

1

Ще один спосіб отримання результатів

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.