SQLite wybierz gdzie jest puste?

126

Jak w SQLite mogę wybrać rekordy, w których jakaś_kolumna jest pusta?
Puste liczy się jako NULL i „”.

Timo Huovinen
źródło
8
Dobrze jest sformułować pytania jako pytania. Co mamy odpowiedzieć?
javawizard

Odpowiedzi:

289

Istnieje kilka sposobów, na przykład:

where some_column is null or some_column = ''

lub

where ifnull(some_column, '') = ''

lub

where coalesce(some_column, '') = ''

z

where ifnull(length(some_column), 0) = 0
Guffa
źródło
Jakie są zalety każdego rozwiązania?
Pacerier
1
@Pacerier: Mogą występować pewne różnice w wydajności, ale poza tym to tylko kwestia stylu.
Guffa
3
@Guffa Mam na myśli oczywiście wydajność .. To jest baza danych, prawda? optymalizacja jest ważna w dbs. zysk trochę wydajność jest dużo
Pacerier
4
length (some_column) należy unikać, ponieważ może to obliczyć długość w locie - AFAIK obecny SQLite robi to dla kolumn z powinowactwem do tekstu. Poza tym jesteś na łasce optymalizatora - chociaż spodziewałbym się, że będą identyczne. Możesz to sprawdzić za pomocą EXPLAIN.
peterchen
@peterchen: Tak, to zależy od tego, co zrobi optymalizator. Podałem lengthprzykład, ponieważ w niektórych sytuacjach może to być szybsze, ponieważ porównywanie liczb jest prostsze niż porównywanie łańcuchów. Jeśli zależy Ci na wydajności, powinieneś oczywiście sprawdzić, co robi.
Guffa,
27

Wygląda na to, że możesz po prostu zrobić:

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

Przypadek testowy:

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);

Wynik:

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

id        
----------
1         
2         
5    
Daniel Vassallo
źródło
1

Może masz na myśli

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

ale nie mogę powiedzieć, ponieważ tak naprawdę nie zadałeś pytania.

µBio
źródło
0

Możesz to zrobić w następujący sposób:

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);

To da ci liczbę wierszy, w których wartość kolumny jest pusta lub pusta.

mahesh takkalwad
źródło