我创建了一个包含String
列的数据库,其中包含String
格式的日期(dd / mm / yyyy)。我想从该表中获取两个给定日期之间的数据,但是当我尝试使用下面的查询时,我发现它在我选择的月份和年份没有任何区别;它只比较“dd / mm / yy”中的“dd”字段。
以下查询将显示每个月和每年的第14天至第25天之间的所有数据。我想要在给定的日期,月份和年份之间的数据。
Select * from RunningLog
where CAST(RunDate AS DATETIME) between CAST('14/04/2011' AS DATETIME) and
CAST('25/04/2011' AS DATETIME)
答案 0 :(得分:1)
请参阅我的回答here,了解如何(或不存储)sqlite3中的日期。 Sqlite没有日期字段,因此它实际存储为字符串。试图对此进行排序/过滤将证明是困难的。而是使用int
字段,并以毫秒为单位存储时间。
我更喜欢INTEGER / Unix时间存储,然后使用内置的日期和时间函数在从DB中提取时进行格式化。
示例:
long millis = Calendar.getTimeInMillis();
将millis作为整数存储在数据库中。然后,请参阅有关如何在sqlite3中使用日期和时间函数的第一个链接。
答案 1 :(得分:0)
Sqlite3文档不说它可以投射日期时间:http://www.sqlite.org/lang_expr.html(请参阅投射表达式数字)。你为什么不从Java那里做到这一点?我的意思是,你如何在数据库中存储日期?我强烈建议保存一段时间(Unix时间);通过这种方式,您可以轻松获得几个代表确切日期和时间的长数字,并使用它们来查询您的表格。
答案 2 :(得分:0)
Recomendation:使用数据库中的Datetime字段和JodaTime作为Time库。
将日期时间解析为DateTime对象非常容易,然后您可以使用许多有用的方法来比较和使用日期。
此外,您的SQL查询会更好。
答案 3 :(得分:0)
您可以计算两个日期之间的秒数。这是一个例子: SELECT strftime('%s','now') - strftime('%s','2004-01-01 02:34:56');
根据差异的标志,您可以说一个日期是否在另一个日期之前。在您的情况下,您必须进行两次比较,因此您必须验证两个差异的符号。在这里你可以找到其他的例子,也许他们会给你其他想法(http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions)。