gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 16:15:17 24 4
gpt4 key购买 nike

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

第 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com