Виберіть SQLite, де порожній?


125

Як в SQLite можна вибрати записи, де деякий стовпець порожній?
Порожні рахуються як NULL та "".


8
Це допомагає, якщо ви формулюєте питання як питання. На що ми повинні відповісти?
javawizard

Відповіді:


288

Існує кілька способів, таких як:

where some_column is null or some_column = ''

або

where ifnull(some_column, '') = ''

або

where coalesce(some_column, '') = ''

з

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

Які переваги кожного рішення?
Pacerier

1
@Pacerier: Можливо, є якась різниця у продуктивності, але окрім того, що це лише питання стилю.
Гуффа

3
@Guffa Я маю на увазі звичайно продуктивність .. Це база даних, чи не так? оптимізація важлива у dbs. невеликий приріст продуктивності багато
Pacerier

4
довжини (some_column) слід уникати, оскільки це може обчислити довжину на льоту - поточний SQLite AFAIK робить для стовпців із спорідненістю тексту. Крім цього, ви перебуваєте на волі оптимізатора - хоча я б очікував, що вони будуть однаковими. Ви можете перевірити це за допомогою EXPLAIN.
peterchen

@peterchen: Так, це залежить від того, що робить оптимізатор. Я включив lengthприклад, тому що він дійсно може бути швидшим в якійсь ситуації, оскільки порівняння чисел простіше, ніж порівняння рядків. Якщо продуктивність для цього викликає занепокоєння, ви, звичайно, повинні перевірити, що це робить.
Гуффа

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 = ''

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


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

Це дасть вам номер рядків, де значення стовпця є нульовим або порожнім.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.