Sqlite Query无法正常运行

时间:2012-01-02 17:16:10

标签: java android sql

我创建了一个包含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)

4 个答案:

答案 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)。