我正在尝试根据SQLiteDatabase
中存储的数据生成每月财务报告。以下代码返回null
日期
String selectQuery = "SELECT id, STRFTIME('%Y-%m',_date) AS _date, SUM(amount) AS amount, _type FROM personal_finance GROUP BY _date, _type";
SQLiteDatabase db = this.getWritableDatabase();
Cursor cursor = db.rawQuery(selectQuery, null);
if (cursor.moveToFirst()) {
do {
Finance finance = new Finance();
finance.setId(cursor.getInt(0));
finance.setDate(cursor.getString(1));
finance.setAmount(cursor.getInt(2));
finances.add(finance);
} while (cursor.moveToNext());
}
答案 0 :(得分:0)
我建议null问题是由于_date列中存储的值不是可接受/可识别的日期格式之一,因为查询本身似乎可以正常工作(稍后会看到它是如何工作的)虽然没有按预期工作。
例如,假设一个表填充为: -
时间字符串时间字符串可以采用以下任何格式:
YYYY-MM-DD
YYYY-MM-DD HH:MM
YYYY-MM-DD HH:MM:SS
YYYY-MM-DD HH:MM:SS.SSS
YYYY-MM-DDTHH:MM
YYYY-MM-DDTHH:MM:SS
YYYY-MM-DDTHH:MM:SS.SSS
HH:MM
HH:MM:SS
HH:MM:SS.SSS
now
DDDDDDDDDD
然后您的查询将导致: -
<强> 1。因此,基础数据导致空。
从结果中您还可以看到数据未按月分组,因此按日期汇总。这是因为年/月派生列的名称与源列相同,即_date,但它是GROUP将使用的实际_date列。
这是一个简单的更改,只需为派生列使用不同的名称,然后在GROUP子句中使用它。例如:
SELECT id, STRFTIME('%Y-%m',_date) AS short_date, SUM(amount) AS amount FROM personal_finance GROUP BY short_date, _type
这导致: -