我正在开发的应用程序允许用户创建特定日期的日志。我试图根据某个日期范围撤回信息。
这是创建表格的代码(为了这篇文章的目的而缩减):
CREATE TABLE IF NOT EXISTS TimeLogged(
...
LogDate DATE NOT NULL
);
用于将日期插入表中的代码是:
INSERT INTO TimeLogged (LogDate) VALUES (date('2012-01-14'));
以下是我用来获取日期范围的查询:
SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')
它在Sqlite命令窗口中运行良好。这是一个链接,因为我太新了,不能发布pix: Sqlite Command Window
以下是我在Flex / Flash Builder 4.6中使用的代码,以获取结果:
var stmt:SQLStatement = new SQLStatement();
stmt.sqlConnection = SQLCom.SQLCon;
stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN date('2012-01-01') AND date('2012-04-16')";
try{
stmt.execute();
}
catch(err:SQLError){
trace(err.details);
}
var a:ArrayCollection = new ArrayCollection(stmt.getResult().data);
trace("a.length: " + a.length);
for(var i:int = 0; i < a.length; ++i)
trace("a[" + i + "]: " + a[i].LogDate);
即使有多条记录,我也没有得到任何结果。
当我删除WHERE / BETWEEN语句时,这是我在Console输出中得到的内容: Flex/Flash Builder Console output
提前感谢任何可以解决我的问题的人。
答案 0 :(得分:1)
我找到了有用的东西。我创建了一个将UTC日转换为朱利安日的函数:
protected function UTCToJulianDay(d:Date):Number {
return ((( d.time - (d.getTimezoneOffset() * 60000)) / 86400000) + 2440587.5);
}
然后我通过函数运行每个日期对象:
var d:Date = new Date();
d.setTime(d.getTime() - (86400000 * 7));// first day is one week prior
var d1:Number = UTCToJulianDay(d);
var d2:Number = UTCToJulianDay(new Date());
所以date对象只是按如下方式进入查询(参考原始帖子获取完整代码):
stmt.text = "SELECT LogDate FROM TimeLogged WHERE LogDate BETWEEN " + d1 + " AND " + d2;