我有一个SQLite数据库,其中包含一个包含dueDates列的任务表。我想过滤掉明天之后的日期。
如果明天的日期是4月29日,我应该知道明天的日期。我想得到明天之后的任务数量。
为此,我已将字符串转换为日期。格式为:
Calendar calendar = Calendar.getInstance();
dateToday = calendar.getTime();
SimpleDateFormat df = new SimpleDateFormat("d MMM yyyy");
dueDateToday = df.format(dateToday);
calendar.add(Calendar.DAY_OF_YEAR, 1);
dueTomorrow = calendar.getTime();
dueDateTomorrow = df.format(dueTomorrow);
,查询是:
public int getPendingTasksLaterDays(String tomorrow) {
ArrayList<Task> conList = new ArrayList<Task>();
String selectQuery = "SELECT * FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 1" + " AND " + KEY_DUE_DATE + " > '" + tomorrow + "'" ;
SQLiteDatabase db = this.getWritableDatabase();
Cursor mCount= db.rawQuery(selectQuery,null);
if (mCount.moveToFirst()) {
do {
count = mCount.getInt(0);
} while (mCount.moveToNext());
}
Log.d("query",selectQuery);
Log.d("count",String.valueOf(count));
mCount.close();
return count;
}
但查询对我不起作用。我得到的计数是0。 我做错了什么?
答案 0 :(得分:1)
您的查询可以使用SQLite中的date
函数查找明天之后的所有内容,但这假设您已至少以YYYY-MM-DD
格式正确存储了截止日期列。 (其他格式在链接中)。
SELECT COUNT(*) FROM tasks WHERE due_date > date('now', '+1 day');
如果您没有在数据库中正确存储日期,那么,是的,您很可能会获得0结果。
还值得一提的是,您可以使用getCount
方法从Cursor获取结果数,而无需COUNT(*)
int count = db.rawQuery(selectQuery,null).getCount();
答案 1 :(得分:0)
像这样更改您的查询
String selectQuery = "SELECT count(*) FROM " + TASK_TABLE + " WHERE " + KEY_TASK_STATUS + " = 1" + " AND " +
KEY_DUE_DATE + " > '" + tomorrow + "'" ;