Android SQLite RawQuery不返回2017日期

时间:2016-05-04 16:25:21

标签: android database sqlite

我有一个包含即将出生的数据库。该文件中有5条记录,截止日期为(11-15-2016,10-15-2016,12-14-2016,12-13-2016和02-12-2017) 查询是

SQLiteDatabase db = dbhelper.getReadableDatabase();
        String QueryPart1="SELECT inseminations._ID, inseminations.patient_id, inseminations.date_due ";
        String QueryPart2="FROM inseminations ";
        String QueryPart3="WHERE inseminations.date_due>=? ";
        String QueryPart4="ORDER BY inseminations.date_due ASC";
        String FinalQuery=QueryPart1+QueryPart2+QueryPart3+QueryPart4;
        mCursor = db.rawQuery(FinalQuery ,howToFilter);'

howToFilter是

            String howToFilter[]={ExpectedDateDue};

ExpectedDateDue是

        ExpectedDateDue = new SimpleDateFormat("MM-dd-yyyy").format(new Date());

查询检索除2017年以外的所有记录,列表视图排序正确,就好像查询只记录月份在当月而不是整个日期之后的那些记录。 / p>

1 个答案:

答案 0 :(得分:2)

SQLite中文本的比较运算符使用词典顺序。例如,这意味着def descendants_mapper(klass) klass.subclasses.reduce({}){ |memo, subclass| memo[subclass] = descendants_mapper(subclass); memo } end { MasterClass => descendants_mapper(MasterClass) } "是小于 "01-01-2017。 SQLite没有迹象表明这些字符串代表了应该按时间顺序进行比较的时刻。

一般情况下,我不喜欢在数据库中使用字符串作为时间戳,原因如下。我更喜欢将时间戳存储为表示自纪元以来的秒(或毫秒)的长值。以这种方式比较时间戳要容易得多,并且在SQLite或Java中转换到日期字符串和从日期字符串转换都很简单。

如果由于某种原因这不可行,那么我建议您改变将日期字符串存储在数据库中的方式。而不是"05-04-2016",请使用MM-dd-yyyy。在这种格式中,词典比较将起作用;使用与以前相同的例子,yyyy-MM-dd" 大于 "2017-01-01。此外,如果您决定使用这种格式,则可以使用此格式作为SQLite各种date and time functions的输入。

如果您无法改变日期的存储方式,您需要以某种方式将它们转换为与您期望的格式相当的格式。您可以在查询中使用SQLite的"2016-05-04"substr()(并置)函数将日期从||转换为MM-dd-yyyy格式。 this answer中的代码证明了这一点。