Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Sqlite查询工作不正常_Java_Android_Sql - Fatal编程技术网

Java Sqlite查询工作不正常

Java Sqlite查询工作不正常,java,android,sql,Java,Android,Sql,我创建了一个数据库,其中包含String列,其中包含String格式(dd/mm/yyyy)的日期。我想从两个给定日期之间的表中获取数据,但是当我尝试下面的查询时,我发现我选择的月份和年份没有任何区别;它仅将“dd”字段与“dd/mm/yy”字段进行比较 下面的查询将显示每月和每年第14天到第25天之间的所有数据。我需要给定日期、月份和年份之间的数据 Select * from RunningLog where CAST(RunDate AS DATETIME) between CAST('1

我创建了一个数据库,其中包含
String
列,其中包含
String
格式(dd/mm/yyyy)的日期。我想从两个给定日期之间的表中获取数据,但是当我尝试下面的查询时,我发现我选择的月份和年份没有任何区别;它仅将“dd”字段与“dd/mm/yy”字段进行比较

下面的查询将显示每月和每年第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文档没有说它可以强制转换日期时间:(参考强制转换表达式数字)。为什么不从Java上实现呢?我的意思是,你是如何在数据库中存储日期的?我强烈建议节省长时间(Unix时间);这样,您就可以很容易地获得两个表示确切日期和时间的长数字,并使用它们来查询表。

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

很容易将datetime解析为datetime对象,然后您就可以使用许多有用的方法来比较和处理日期

此外,您的SQL查询也会更好

请参阅我关于日期如何(或不如何)存储在sqlite3中的回答。Sqlite没有日期字段,因此它实际上存储为字符串。尝试对此进行排序/筛选将被证明是困难的。而是使用
int
字段,并以毫秒为单位存储时间

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

例如:

long millis = Calendar.getTimeInMillis();

将毫秒作为整数存储在数据库中。然后,请参阅有关如何使用sqlite3中的日期和时间函数的第一个链接。

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

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