SQL: как выполнить строку не равно

115

У меня следующий запрос

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

Я ожидаю, что это вернет все результаты, в которых тестер не является строкой username, но это не работает. Я думаю, что ищу обратный Likeоператор, но не уверен? В своих поисках я нашел решения для чисел (отсюда я получил <>), но, похоже, это не работает со строками.

Дэн Циборовски - MSFT
источник
5
Есть ли у вас проблемы с NULLценностями? ( NULL <> 'username' => NULL=> ложь)?
Wrikken

Ответы:

175

Ваше 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')
Крис
источник
21

NULL-безопасное условие будет выглядеть так:

select * from table
where NOT (tester <=> 'username')
Виктор Земан
источник
Да !, это единственное, что у меня работает, потому что у меня есть цепочка и. Не знал оператора <=>. Спасибо!
varta
Просто заметил, что <=>оператор существует только в MySQLмире, для получения дополнительной информации см. Что такое <=>
Top-Master
8
select * from table
where tester NOT LIKE '%username%';
Омер Фарук Алмали
источник
7

Здесь strcompможет быть уместна функция (возвращает 0, если строки идентичны):

 SELECT * from table WHERE Strcmp(user, testername) <> 0;
user3088463
источник
1

Другой способ получить результат

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
Картик Касубха
источник