在SQLite中比较日期时遇到麻烦

时间:2016-04-08 13:57:21

标签: android sqlite android-sqlite date-comparison

我试图将当前日期与另一个日期进行比较,存储在SQLite数据库列中,并选择这些日期之间的每一行。
我无法理解为什么我的查询无效。

@Override
public int getFamiliesClientsTotalNum() {
    String countQuery = "SELECT * FROM " + SQLiteHelper.FAMILIES_SERVICES_TABLE_TITLE + " WHERE DATE("
            + SQLiteHelper.FAMILIES_SERVICES_DATE
            + ") >= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate)
            + "') AND DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE
            + ") <= DATE('" + new SimpleDateFormat("yyyy-MM-dd").format(mFinishDate) + "')";

    Cursor cursor = mSQLiteHelper.getReadableDatabase().rawQuery(countQuery, null);

    int cnt = 0;
    while(cursor.moveToNext()){
        Log.i(TAG, "countQuery: " + countQuery);
        Log.i(TAG, "today is: " + new SimpleDateFormat("yyyy-MM-dd").format(mStartDate));
            cnt++;
    }
    cursor.close();
    return cnt;
}

1 个答案:

答案 0 :(得分:1)

由于您传递的是value(由Date()函数返回)而不是column name,因此无法正常工作:

... DATE(" + SQLiteHelper.FAMILIES_SERVICES_DATE + ") ...

这就像写作

... WHERE Date(MyDateColumn) = '2016-04-08' ...

确实必须是这样的:

..." + SQLiteHelper.FAMILIES_SERVICES_DATE + "...

没有使用Date()函数。

就像(正确)写作

... WHERE MyDateColumn = '2016-04-08' ...

注意:您在查询中两次犯了同样的错误。

<强> [编辑]

使用BETWEEN ... AND ...运算符可以更好(也更容易阅读),用于指定日期范围:

... WHERE MyDateColumn BETWEEN '2015-04-08' AND '2016-04-08' ...