SQLite selecione onde está vazio?

125

No SQLite, como posso selecionar registros onde some_column está vazio?
Vazio conta como NULL e "".

Timo Huovinen
fonte
8
Ajuda se você formular perguntas como perguntas. O que devemos responder?
Javawizard #

Respostas:

288

Existem várias maneiras, como:

where some_column is null or some_column = ''

ou

where ifnull(some_column, '') = ''

ou

where coalesce(some_column, '') = ''

do

where ifnull(length(some_column), 0) = 0
Guffa
fonte
Quais são as vantagens de cada solução?
Pacerier 15/10
1
@ Pacerier: Pode haver alguma diferença no desempenho, mas fora isso, é apenas uma questão de estilo.
Guffa 15/10/11
3
@ Guffa Quero dizer, é claro, o desempenho .. Este é o banco de dados, não é? otimização é importante em dbs. um ganho de desempenho pouco é um monte
Pacerier
4
length (some_column) deve ser evitado, pois isso pode calcular o comprimento em tempo real - o SQLite atual do AFAIK faz para colunas com afinidade de texto. Fora isso, você está à mercê do otimizador - embora eu esperasse que eles fossem idênticos. Você pode verificar isso usando EXPLAIN.
Peterchen
@ Peterchen: Sim, depende do que o otimizador faz. Incluí o lengthexemplo porque, na verdade, pode ser mais rápido em algumas situações, pois comparar números é mais simples do que comparar seqüências de caracteres. Se o desempenho é uma preocupação, é claro que você deve verificar o que faz.
Guffa
27

Parece que você pode simplesmente fazer:

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

Caso de teste:

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

Resultado:

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

id        
----------
1         
2         
5    
Daniel Vassallo
fonte
1

Talvez você queira dizer

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

mas não sei dizer, pois você realmente não fez uma pergunta.

µBio
fonte
0

Você pode fazer isso com o seguinte:

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

Isso fornecerá o número de linhas em que o valor da coluna é nulo ou em branco.

mahesh takkalwad
fonte