SQLite seleccionar donde está vacío?


125

En SQLite, ¿cómo puedo seleccionar registros donde some_column está vacío?
Vacío cuenta como NULL y "".


8
Es útil si formula preguntas como preguntas. ¿Qué se supone que debemos responder?
javawizard

Respuestas:


288

Hay varias formas, como:

where some_column is null or some_column = ''

o

where ifnull(some_column, '') = ''

o

where coalesce(some_column, '') = ''

de

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

¿Cuáles son las ventajas de cada solución?
Pacerier

1
@Pacerier: puede haber alguna diferencia en el rendimiento, pero aparte de eso, es solo una cuestión de estilo.
Guffa

3
@Guffa quiero decir, por supuesto, el rendimiento ... Esta es la base de datos, ¿no? La optimización es importante en dbs. una pequeña ganancia de rendimiento es mucho
Pacerier

44
se debe evitar la longitud (alguna_columna), ya que esto puede calcular la longitud sobre la marcha - AFAIK SQLite actual lo hace para columnas con afinidad de texto. Aparte de eso, está a merced del optimizador, aunque esperaría que fueran idénticos. Puede verificar eso utilizando EXPLAIN.
peterchen

@peterchen: Sí, depende de lo que haga el optimizador. Incluí el lengthejemplo porque en realidad podría ser más rápido en alguna situación, ya que comparar números es más simple que comparar cadenas. Si el rendimiento para eso es preocupante, por supuesto, debe verificar lo que hace.
Guffa

27

Parece que simplemente puedes hacer:

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

Caso de prueba:

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    

1

Tal vez te refieres

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

pero no puedo decirlo porque realmente no hiciste una pregunta.


0

Puede hacer esto con lo siguiente:

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

Esto le dará el número de filas donde el valor de la columna es nulo o en blanco.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.