SQLite选择哪里空?


Answers:


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,2011年

1
@Pacerier:性能可能有所不同,但除此之外,这只是样式问题。
Guffa 2011年

3
@Guffa我当然是指性能。这不是数据库吗?优化在数据库中很重要。性能有很大提高
Pacerier 2011年

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

但是我不能告诉你,因为你没有真正问过一个问题。


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

这将为您提供列值为null或空白的行数。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.