SQLite 选择哪里为空?
Posted
技术标签:
【中文标题】SQLite 选择哪里为空?【英文标题】:SQLite select where empty? 【发布时间】:2011-04-06 22:57:11 【问题描述】:在 SQLite 中,如何选择 some_column
为空的记录?
空算NULL
和""
。
【问题讨论】:
如果您将问题表述为问题,这会有所帮助。我们应该回答什么? 【参考方案1】:您可以通过以下方式做到这一点:
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);
这将为您提供列值为空或空白的行数。
【讨论】:
【参考方案2】:看起来你可以简单地做:
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
【讨论】:
【参考方案3】:有几种方法,例如:
where some_column is null or some_column = ''
或
where ifnull(some_column, '') = ''
或
where coalesce(some_column, '') = ''
的
where ifnull(length(some_column), 0) = 0
【讨论】:
每种解决方案的优势是什么? @Pacerier:性能上可能会有一些差异,但除此之外,这只是风格问题。 @Guffa 我的意思当然是性能.. 这是数据库,不是吗?优化在 dbs 中很重要。一点性能提升很多 length(some_column) 应该避免,因为这可能会即时计算长度 - AFAIK 当前的 SQLite 对具有文本关联的列执行。除此之外,您受优化器的支配 - 尽管我希望它们是相同的。您可以使用 EXPLAIN 进行验证。 @peterchen:是的,这取决于优化器的作用。我包含了length
示例,因为在某些情况下它实际上可能更快,因为比较数字比比较字符串更简单。如果对此的性能是一个问题,您当然应该检查它的作用。【参考方案4】:
也许你的意思
select x
from some_table
where some_column is null or some_column = ''
但我不能说,因为你并没有真正问过问题。
【讨论】:
以上是关于SQLite 选择哪里为空?的主要内容,如果未能解决你的问题,请参考以下文章