如何在sqlite中获得列大于零的所有结果?

Posted

技术标签:

【中文标题】如何在sqlite中获得列大于零的所有结果?【英文标题】:How to get all results where column is larger then zero in sqlite? 【发布时间】:2011-02-08 04:55:48 【问题描述】:

我在 SQLite Chrome (html5) 中创建了一个表:

transaction.executeSql(
            'CREATE TABLE IF NOT EXISTS record('+
            'id INTEGER NOT NULL PRIMARY KEY,'+
            'fkindicatorspeciesid INTEGER NOT NULL REFERENCES indicatorspecies(indicatorspeciesid),'+
            'latitude INTEGER NOT NULL,'+
            'longitude INTEGER NOT NULL,'+
            'time TEXT NOT NULL,'+
            '`when` TEXT NOT NULL,'+
            'numberseen INTEGER NOT NULL,'+
            'notes TEXT NOT NULL,'+
            'online_recordid INTEGER,'+
            'status TEXT,'+
            'locationid INTEGER REFERENCES location(locationid),'+
            'surveyid INTEGER REFERENCES survey(id));',
            [], nullHandler,errorHandler);

然后我向其中添加一些数据:

现在我尝试检索“online_recordid”大于零的所有记录:

select * from record where online_recordid > 0;

我不应该取回我的记录,因为“online_recordid”列中没有任何内容。问题是我确实找回了记录!

【问题讨论】:

【参考方案1】:

SQLite uses a more general dynamic type system.

您可以有效地将''(空字符串)存储到online_recordid中,即使它被定义为“INTEGER”。这只影响Type Affinity,并且不像传统的RDBMS那样以任何方式限制数据。

最有可能发生的情况是,当您真正想要存储的内容为 NULL 时,您的代码将 '' 插入到 online_recordid

当查询 online_recordid > 0 触发时,空白将转换为 [something],使其成为 >0

【讨论】:

【参考方案2】:

只需检查 online_recordid 不为空:

select * from record where online_recordid > 0 and online_recordid is not null

但是,这种行为很奇怪。我试过和你做同样的查询,但我没有得到任何记录。也许我做了和你不一样的事情。

【讨论】:

我尝试了您的线路,但得到了没有任何 online_recordid 的记录。我认为可能发生了一些事情,正如cyberkiwi所解释的那样。【参考方案3】:

这就是我最终解决它的方法。

select * from record where online_recordid <> '' and online_recordid > 0;

【讨论】:

以上是关于如何在sqlite中获得列大于零的所有结果?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过C ++中的数据获得向量的索引

查找关联计数大于零的所有记录

如何从 sqlite 游标中获取列值?

如何过滤具有大于和小于运算符的grafana仪表板?

对多个熊猫列进行排序并计算大于零的值百分比

如何在json android中返回多行并将其传递给sqlite