SQLite seleziona dove vuoto?


125

In SQLite, come posso selezionare i record in cui some_column è vuoto?
Vuoto conta sia come NULL che "".


8
È utile esprimere le domande come domande. Cosa dovremmo rispondere?
javawizard

Risposte:


288

Ci sono diversi modi, come:

where some_column is null or some_column = ''

o

where ifnull(some_column, '') = ''

o

where coalesce(some_column, '') = ''

di

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

Quali sono i vantaggi di ciascuna soluzione?
Pacerier

1
@ Pacerier: Potrebbe esserci qualche differenza nelle prestazioni, ma a parte questo è solo una questione di stile.
Guffa

3
@ Guffa intendo ovviamente la performance .. Questo è un database non è vero? l'ottimizzazione è importante in dbs. un piccolo guadagno di prestazioni è molto
Pacerier

4
length (some_column) dovrebbe essere evitato, poiché questo può calcolare la lunghezza al volo - AFAIK corrente SQLite fa per le colonne con affinità di testo. Oltre a questo, sei in balia dell'ottimizzatore, anche se mi aspetto che siano identici. È possibile verificarlo utilizzando EXPLAIN.
Peterchen

@ peterchen: Sì, dipende da cosa fa l'ottimizzatore. Ho incluso l' lengthesempio perché potrebbe effettivamente essere più veloce in alcune situazioni, poiché il confronto dei numeri è più semplice del confronto delle stringhe. Se la prestazione per questo è un problema, dovresti ovviamente controllare cosa fa.
Guffa

27

Sembra che tu possa semplicemente fare:

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

Scenario di test:

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

Risultato:

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

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

1

Forse vuoi dire

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

ma non posso dirlo visto che non hai davvero fatto una domanda.


0

Puoi farlo con quanto segue:

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

Questo ti darà il numero di righe in cui il valore della colonna è nullo o vuoto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.