android - 使用 Sqlite 查询从特定月份选择一组值

标签 android sqlite date android-sqlite

我有一个数据库,其中包含按日期排序的不同事务:

第 1 列:交易金额

第 2 列:日期(以毫秒为单位)

我想汇总特定月份的所有交易。例如:2015 年 1 月。我的问题与这篇文章相同:Sum over values by month in milliseconds但我不是来适应我的问题的,而且我的声誉不允许我与帖子互动。

这是我的代码:

public int getIncomeOfMonth(int monthnumber) {

    int year = Calendar.getInstance().get(Calendar.YEAR);

    Cursor cursorIncome = db.rawQuery(
            "SELECT sum(amount) FROM " + MyDbTable +
            " WHERE " + " strftime('%" + year + "-%" + monthnumber + ", " + COLUMN_DATE + "/ 1000, 'unixepoch') ", null);


    int positiveTransacSelectedMonth = 0;

    if(cursorPositiveTransac.moveToFirst()) {
        positiveTransacSelectedMonth = (cursorPositiveTransac.getDouble(0));
    }

    return positiveTransacSelectedMonth;

}

我已经阅读了 Sqlite 网站上的文档,但找不到理解的方法。你能解释一下如何在我的案例中使用 strftime 或更正我的代码吗? 感谢您的帮助。

最佳答案

首先,以毫秒为单位存储日期不是一个好主意。在根据Sqlite documentation (section 1.2) ,您应该以下列方式之一存储您的日期:

  • ISO8601 字符串形式的文本(“YYYY-MM-DD HH:MM:SS.SSS”)。
  • 真实如儒略日数字。
  • 作为 Unix 时间的整数,自 1970-01-01 00:00:00 UTC 以来的秒数。

在那之后,它不会影响你实际存储日期的方式,你总是可以使用 strftime 来管理它。 .

在您的情况下,您可以使用以下代码:

SELECT SUM(amount) FROM transactions 
WHERE strftime('%m', transactionDate) = '05' // replace '05' with your month

this fiddle ,我刚刚创建。正如您在那里看到的,日期时间可以以不同的方式存储,但 strftime 可以以相同的方式作用于所有日期时间。

关于android - 使用 Sqlite 查询从特定月份选择一组值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30036612/

相关文章:

ios - 如何使用 Objective C 在 SQLITE 中启用外键约束

iphone - 为什么在 iOS6 上访问 SQLite 数据库需要更长的时间?

c++ - 在 C++ 中自定义日期格式

java - 我如何从匿名类访问我的主类?

java - 如何保证应用数据的完整性?

java - 按钮 onClick 后程序崩溃

Android findViewWithTag 返回 null

android - 当应用程序附带数据库以发布新版本时更新 SQLite 数据库

java - 如何找到 YearMonth 等于或晚于当前月份?

linux - 如何递归打印列的内容