如何在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中获得列大于零的所有结果?的主要内容,如果未能解决你的问题,请参考以下文章