SQL: Dize nasıl gerçekleştirilir eşit değildir


114

Aşağıdaki sorguya sahibim

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

Bunun, test cihazının dize olmadığı tüm sonuçları döndürmesini bekliyorum username, ancak bu çalışmıyor. Sanırım Likeoperatörün tersini arıyorum ama emin değilim? Aramalarımda sayılar için çözümler buldum (<> buradan geldiğim yer), ancak bu dizelerle çalışmıyor gibi görünüyor.


5
Değerlerle sorun yaşadığınız NULLdeğerler mi? ( NULL <> 'username' => NULL=> yanlış)?
Wrikken

Yanıtlar:


174

Kişisel wherefıkra tüm satırları döndürür testeruymuyor usernameVE nerede testerboş değil.

NULL eklemek istiyorsanız, şunu deneyin:

where tester <> 'username' or tester is null

Alt dize olarak "kullanıcı adı" kelimesini içermeyen dizeler arıyorsanız, o likezaman kullanılabilir:

where tester not like '%username%'

42

Aşağıdaki sorguyu deneyin

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

20

BOŞ güvenli durum şöyle görünür:

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

Evet !, benim için işe yarayan tek şey bu, çünkü bir zincirim var. <=> operatörünü bilmiyordum. Teşekkürler!
varta

<=>Operatörün yalnızca MySQLdünyada var olduğunu fark ettim, daha fazla bilgi için ne olduğunu görün <=>
Top-Master


7

strcompBuradaki görevi uygun olabilir (dize aynı döner 0):

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

1

Sonuçları almanın başka bir yolu

SELECT * from table WHERE SUBSTRING(tester, 1, 8)  <> 'username' or tester is null
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.