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

时间:2011-02-08 04:55:48

标签: sql html sqlite html5 google-chrome

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

然后我添加一些数据: enter image description here

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

select * from record where online_recordid > 0;

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

3 个答案:

答案 0 :(得分:1)

SQLite uses a more general dynamic type system.

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

最有可能发生的事情是,当您真正想存储的内容为NULL时,您的代码会插入online_recordid

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

答案 1 :(得分:0)

只需检查online_recordid是否为空:

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

然而,这种行为很奇怪。我试着和你做同样的查询,但我没有记录回来。也许我做了与你不同的事情。

答案 2 :(得分:0)

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

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