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 选择哪里为空?的主要内容,如果未能解决你的问题,请参考以下文章

使 sqlite 用户定义的函数不会在空选择时触发

如何选择特定日期的某些行

pycharm .sqlite文件拖动到Database里面为空

带有 SQLite 的 LinqToDB - 引用属性为空

如果列结果为空,C++ SQLite 停止错误

MagicalRecord SQLite 文件为空