Sqlite查询无法正常工作

问题描述:

我创建了String格式(日/月/年)的String列的数据库。我想从两个给定日期之间的表中获取数据,但是当我尝试使用下面的查询时,发现它对我选择的月份和年份没有影响;它仅从“dd/mm/yy”比较“dd”字段。Sqlite查询无法正常工作

以下查询将显示从每个月和每年的第14天到第25天之间的所有数据。我想要给定日期,月份和年份之间的数据。

Select * from RunningLog 
where CAST(RunDate AS DATETIME) between CAST('14/04/2011' AS DATETIME) and 
     CAST('25/04/2011' AS DATETIME) 

SQLITE3文档说它可以投一个日期时间:http://www.sqlite.org/lang_expr.html(参见演员表情数字)。你为什么不从Java那里做到这一点?我的意思是,你如何在数据库中存储日期?我强烈建议保存一段时间(Unix时间);这样你可以很容易地得到一些代表确切日期和时间的长数字,并用它们来查询你的表格。

建议:使用数据库中的日期时间字段和JodaTime作为时间库。

很容易解析日期时间到DateTime对象中,然后您有许多有用的方法来比较和使用日期。

此外,你的SQL查询会更好。

请参阅我的回答here关于日期(或不)存储在sqlite3中的方式。 Sqlite没有日期字段,所以它实际上存储为一个字符串。试图对此进行排序/过滤将证明是困难的。请使用int字段,并以毫秒为单位存储时间。

我更喜欢INTEGER/Unix时间存储,然后使用内置的日期和时间函数来格式化从数据库中提取时间。

实施例:在数据库中作为一个整数

long millis = Calendar.getTimeInMillis(); 

商店米利斯。然后,请参阅关于如何在sqlite3中使用日期和时间函数的第一个链接。

您可以计算两个日期之间的秒数。这里是一个例子: SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');

根据差异的标志,您可以说一个日期是否在另一个日期之前。在你的情况下,你必须做两个比较,所以你必须验证两个差异的迹象。在这里你可以找到其他的例子,也许他们给你其他的想法(http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions)。