SQLite select nerede boş?


125

SQLite'da, bazı_sütun boş olan kayıtları nasıl seçebilirim?
Boş, hem NULL hem de "" olarak sayılır.


8
Soruları soru olarak ifade etmen yardımcı olur. Ne cevap vermemiz gerekiyor?
javawizard

Yanıtlar:


288

Aşağıdakiler gibi birkaç yol vardır:

where some_column is null or some_column = ''

veya

where ifnull(some_column, '') = ''

veya

where coalesce(some_column, '') = ''

nın-nin

where ifnull(length(some_column), 0) = 0

Her çözümün avantajları nelerdir?
Pacerier

1
@Pacerier: Performansta bazı farklılıklar olabilir, ancak bunun dışında bu sadece bir stil meselesi.
Guffa

3
@Guffa Tabii ki performans .. Bu veritabanı değil mi? dbs'de optimizasyon önemlidir. biraz performans kazancı çok fazla
Pacerier

4
uzunluktan (bir_sütun) kaçınılmalıdır, çünkü bu işlem anında uzunluğu hesaplayabilir - AFAIK mevcut SQLite, metin yakınlığına sahip sütunlar için yapar. Bunun dışında, optimizasyon uzmanının insafına kalıyorsunuz - ancak ben bunların aynı olmasını beklerdim. EXPLAIN kullanarak bunu doğrulayabilirsiniz.
peterchen

@peterchen: Evet, iyileştiricinin ne yaptığına bağlı. lengthÖrneği dahil ettim çünkü bazı durumlarda aslında daha hızlı olabilir, çünkü sayıları karşılaştırmak dizeleri karşılaştırmaktan daha kolaydır. Bunun performansı önemliyse, elbette ne işe yaradığını kontrol etmelisiniz.
Guffa

27

Yapabileceğiniz gibi görünüyor:

SELECT * FROM your_table WHERE some_column IS NULL OR some_column = '';

Test durumu:

CREATE TABLE your_table (id int, some_column varchar(10));

INSERT INTO your_table VALUES (1, NULL);
INSERT INTO your_table VALUES (2, '');
INSERT INTO your_table VALUES (3, 'test');
INSERT INTO your_table VALUES (4, 'another test');
INSERT INTO your_table VALUES (5, NULL);

Sonuç:

SELECT id FROM your_table WHERE some_column IS NULL OR some_column = '';

id        
----------
1         
2         
5    

1

Belki demek istiyorsun

select x
from some_table
where some_column is null or some_column = ''

ama gerçekten bir soru sormadığın için söyleyemem.


0

Bunu şu şekilde yapabilirsiniz:

int counter = 0;
String sql = "SELECT projectName,Owner " + "FROM Project WHERE Owner= ?";
PreparedStatement prep = conn.prepareStatement(sql);
prep.setString(1, "");
ResultSet rs = prep.executeQuery();
while (rs.next()) {
    counter++;
}
System.out.println(counter);

Bu size sütun değerinin boş veya boş olduğu satırların sayısını verecektir.

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.