SQLite выберите где пустой?

126

Как в SQLite выбрать записи, в которых some_column пуст?
Пустой считается как NULL, так и "".

Тимо Хуовинен
источник
8
Это поможет, если вы сформулируете вопросы как вопросы. Что мы должны ответить?
javawizard

Ответы:

289

Есть несколько способов, например:

where some_column is null or some_column = ''

или

where ifnull(some_column, '') = ''

или

where coalesce(some_column, '') = ''

из

where ifnull(length(some_column), 0) = 0
Guffa
источник
Какие преимущества у каждого решения?
Pacerier
1
@Pacerier: Может быть разница в производительности, но в остальном это просто вопрос стиля.
Guffa
3
@Guffa Я имею в виду, конечно, производительность .. Это ведь база данных? оптимизация важна в dbs. небольшой прирост производительности - это много
Pacerier
4
length (some_column) следует избегать, так как это может вычислить длину на лету - AFAIK текущий SQLite делает для столбцов с текстовым сходством. В остальном вы зависите от оптимизатора, хотя я ожидал, что они будут идентичными. Вы можете проверить это с помощью EXPLAIN.
peterchen
@peterchen: Да, это зависит от того, что делает оптимизатор. Я включил этот lengthпример, потому что в некоторых ситуациях он может быть быстрее, поскольку сравнивать числа проще, чем сравнивать строки. Если производительность для этого вызывает беспокойство, вы, конечно, должны проверить, что он делает.
Guffa
27

Похоже, вы можете просто сделать:

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

Прецедент:

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

Результат:

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

id        
----------
1         
2         
5    
Даниэль Вассалло
источник
1

Может ты имеешь в виду

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

но я не могу сказать, так как вы действительно не задавали вопрос.

μBio
источник
0

Вы можете сделать это следующим образом:

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

Это даст вам количество строк, в которых значение столбца пустое или пустое.

Махеш Таккалвад
источник