SQLite auswählen wo leer?


125

Wie kann ich in SQLite Datensätze auswählen, bei denen some_column leer ist?
Leer zählt sowohl als NULL als auch als "".


8
Es hilft, wenn Sie Fragen als Fragen formulieren. Was sollen wir beantworten?
Javawizard

Antworten:


288

Es gibt verschiedene Möglichkeiten:

where some_column is null or some_column = ''

oder

where ifnull(some_column, '') = ''

oder

where coalesce(some_column, '') = ''

von

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

Was sind die Vorteile jeder Lösung?
Pacerier

1
@ Pacerier: Es mag einige Leistungsunterschiede geben, aber ansonsten ist es nur eine Frage des Stils.
Guffa

3
@ Guffa Ich meine natürlich die Leistung .. Das ist Datenbank, nicht wahr? Optimierung ist wichtig in dbs. Ein kleiner Leistungsgewinn ist viel
Pacerier

4
Länge (some_column) sollte vermieden werden, da dies die Länge im laufenden Betrieb berechnen kann - AFAIK aktuelle SQLite für Spalten mit Textaffinität. Davon abgesehen sind Sie dem Optimierer ausgeliefert - obwohl ich erwarten würde, dass sie identisch sind. Sie können dies mit EXPLAIN überprüfen.
Peterchen

@peterchen: Ja, es kommt darauf an, was der Optimierer macht. Ich habe das lengthBeispiel aufgenommen, weil es in manchen Situationen tatsächlich schneller sein kann, da das Vergleichen von Zahlen einfacher ist als das Vergleichen von Zeichenfolgen. Wenn die Leistung dafür ein Problem darstellt, sollten Sie natürlich überprüfen, was sie bewirkt.
Guffa

27

Es sieht so aus, als könnten Sie einfach Folgendes tun:

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

Testfall:

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

Ergebnis:

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

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

1

Vielleicht meinst du

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

aber ich kann es nicht sagen, da du nicht wirklich eine Frage gestellt hast.


0

Sie können dies mit folgendem tun:

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

Dadurch erhalten Sie die Anzahl der Zeilen, in denen der Spaltenwert null oder leer ist.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.