android - SQLite 选择按月分组的总和

标签 android database sqlite date strftime

我正在网上搜索以找到满足此需求的解决方案: 我需要按月收集“金额”数据组的总和。

我找到的是这个请求:

Cursor cursor = mDb.rawQuery("SELECT strftime('%m', date), SUM(amount) FROM " + DATABASE_TABLE + " GROUP BY strftime('%m', date)", null);

但我很紧张,因为我无法从该函数strftime('%m', date);

收集任何月份

我在网上发现这可能来 self 的数据库中的日期格式,该函数无法理解。

存储在我的数据库中的实际日期是:“Thu Dec 01 00:00:00 GMT+00:00 2016”

我使用这个游标来检查返回值:

Cursor cursor = mDb.rawQuery("SELECT distinct date, strftime('%m', date) FROM " + DATABASE_TABLE, null);

在游标中(只检查游标的第一次检查)我有:

  • cursor.getString(0) = Thu Dec 01 00:00:00 GMT+00:00 2016
  • cursor.getString(1) = null

所以我正确地收集了日期,这是无效的转换。

编辑: 正如提议和解释的那样,我认为函数可能会误解格式(显然是这种情况)。

这是我将日期添加到数据库的方式: 我用这个:dateFormat = new SimpleDateFormat("dd/MM/yyyy");

然后这一行将日期添加到我的 Money 对象,然后再将其保存到数据库中:dateFormat.parse("01/12/2016")

你能帮帮我吗? 谢谢。

最佳答案

感谢 Rotwang 引导我解决格式问题,我的问题出在我的数据库项目创建者中

当我创建我的对象时,我只是将存储在我的类中的日期 (java.util.Date date) 没有格式化。

所以日期总是以错误的格式存储。我必须在创建阶段对其进行格式化。下面是创建我的对象并解决我的问题的代码。

dateFormat = new SimpleDateFormat("yyy-MM-dd"); 再次感谢 Rotwang

和:

public void createMoney(Money money) {
        ContentValues values = new ContentValues();

        values.put(TITLE, money.get_title());
        values.put(AMOUNT, money.get_amount());
        values.put(DETAILS, money.get_details());
        values.put(DATE, dateFormat.format(money.get_date()));
        values.put(TYPE_FK_ID, money.get_typeFkId());
        values.put(CONTACT_FK_ID, money.get_contactFkId());
        values.put(REMINDER_FK_ID, money.get_reminderFkId());

        mDb.insert(DATABASE_TABLE, null, values);
    }

关于android - SQLite 选择按月分组的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41061335/

相关文章:

java - 使用 for 循环将 EditText 添加到 android 中的布局

java - onclicklistener 事件的空指针异常

python - 通过 Python 类实现元组和 row_factory 功能

sql - 我有一个sqlite语法错误。什么不对?

java - Firebase 消息传递 - 三星 Android 设备上的 "too many alarms"

javascript - 我的滚动在 samsung android Mobile 中不起作用,但在所有浏览器和设备中都可以正常工作?

iphone - 将本地sqlite数据库移动到远程服务器ios 5

sql - 在一个查询中比较 Postgres 中的两个值

java - 使用 jdbc 通过 PrepareStatement 为 DATETIME 字段插入 null

python - Django:使用多个数据库与 inspectdb?