繁体   English   中英

SQLite查询无法正常工作

[英]Sqlite Query is not working properly

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

在此处查看我的答案,以了解如何在sqlite3中存储(或不存储)日期。 Sqlite没有日期字段,因此它实际上存储为字符串。 尝试对此进行排序/过滤将很困难。 而是使用int字段,并以毫秒为单位存储时间。

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

例:

long millis = Calendar.getTimeInMillis();

将Millis作为整数存储在数据库中。 然后,参考第一个链接,了解如何在sqlite3中使用日期和时间函数。

Sqlite3文档没有说它可以转换日期时间: http ://www.sqlite.org/lang_expr.html(请参阅Cast表达式数字)。 您为什么不使用Java做到这一点? 我的意思是,您如何将日期存储在数据库中? 我强烈建议您节省很长的时间(Unix时间); 这样,您就可以轻松地获得几个代表确切日期和时间的长数字,并使用它们来查询表。

建议:使用数据库中的Datetime字段并将JodaTime用作时间库。

将日期时间解析为DateTime对象非常容易,然后您可以使用许多有用的方法来比较和处理日期。

而且,您的SQL查询会更好。

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

根据差异的符号,您可以说一个日期是否早于另一个日期。 在您的情况下,您必须进行两个比较,因此您必须验证两个差异的符号。 在这里您可以找到其他示例,也许它们可以为您提供其他建议(http://www.sqlite.org/cvstrac/wiki?p=DateAndTimeFunctions)。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM