SQLite wybierz gdzie jest puste?


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

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    

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.


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.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.