【问题标题】:How to get data month wise sqflite in Flutter?如何在 Flutter 中按月获取数据 sqflite?
【发布时间】:2021-05-04 00:47:18
【问题描述】:

Image for how does data look我正在使用flutter制作一个费用跟踪器应用程序,我想显示用户每月完成的费用总和例如:

Month              Amount Spended
January              2000
February             1600

Database columns:
"CREATE TABLE $TABLE_EXPENSES ("
      "$COLUMN_ID INTEGER PRIMARY KEY,"
      "$COLUMN_NAME TEXT,"
      "$COLUMN_AMOUNT TEXT,"
      "$COLUMN_UNNECESSARYEXPENSES INTEGER,"
      "$COLUMN_CATEGORY TEXT,"
      "$COLUMN_DATETIME TEXT"
      ")",

我正在使用 sqflite 创建数据库并将数据存储为文本。我想检索一个月中每一天的费用,然后总结每一天的费用并显示在ListTile中

编辑:

查询:'SELECT * SUM(COLUMN_AMOUNT) FROM TABLE_EXPENSES WHERE COLUMN_DATETIME >= ? AND COLUMN_DATETIME

这是我得到的错误(用于查询):

E/SQLiteLog(10318): (1) near "SELECT": syntax error
E/flutter (10318): [ERROR:flutter/lib/ui/ui_dart_state.cc(177)] Unhandled Exception: DatabaseException(near "SELECT": syntax error (code 1 SQLITE_ERROR): , while compiling: SELECT * FROM expenses WHERE SELECT * SUM(COLUMN_AMOUNT) FROM TABLE_EXPENSES WHERE COLUMN_DATETIME >= 2019 AND COLUMN_DATETIME <= 1989) sql 'SELECT * FROM expenses WHERE SELECT * SUM(COLUMN_AMOUNT) FROM TABLE_EXPENSES WHERE COLUMN_DATETIME >= ? AND COLUMN_DATETIME <= ?' args [2019, 1989]}

我目前正在使用的功能:

Future getDataJan() async{
final db = await database;
sumJan= db.rawQuery(
    'SELECT SUM(AMOUNT) FROM EXPENSES WHERE DATETIME >= ? AND DATETIME <= ?',
    [2021-01-01, 2021-01-31] ).then(Sqflite.firstIntValue);
finalJan=sumJan.toString();

}

图片: errorImage

感谢您的回复。

【问题讨论】:

  • 问题的MCVE在哪里?请将其包含在问题中。还要确保阅读How do I ask good question?
  • 发布您的表的示例数据。
  • 我已经添加了 hanks

标签: sqlite flutter sqflite


【解决方案1】:

您可以使用yyyy-MM-dd HH:mm:SS 等格式的日期进行操作,并在月份之间为搜索实体创建数据库请求。

日期格式示例:

DateFormat('yyyy-MM-dd HH:mm:SS').format(date)

查询示例:

return database.query(
  tableName,
  where: 'date >= ? and date <= ?',
  whereArgs: [from, to],
)
.then((data) => data.map(_fromMap).toList());

示例中的变量:

  1. from - 每月的第一天 (2020-10-01);
  2. to - 每月最后一天(2020-10-31);
  3. ? in where - 从 whereArgs 获取值(第一个 ? - from,第二个 - to);

注意:在 cmets 中描述了您应该使用 SQFLite 工具来创建请求,并且不要使用原始查询(出于性能原因)。

选择示例

final result = await database.rawQuery(
  'select * sum(COLUMN_AMOUNT) from TABLE_EXPENSES where COLUMN_DATETIME >= ? and COLUMN_DATETIME <= ?',
  [from, to],
).then(Sqflite.firstIntValue);

【讨论】:

  • 我可以在这里按月使用分组吗?如果可以,我可以使用吗?
  • 您可以尝试使用groupBy。类似group by date
  • 请不要插入到 where 子句中。使用占位符。有关详细信息,请参阅 bobby-tables.com。
  • @RandalSchwartz 谢谢,我已经完成了答案。
  • 我只使用 SQFlite,感谢您更新的答案和回复,我会试试这个..
猜你喜欢
  • 2021-10-12
  • 1970-01-01
  • 2019-06-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-13
  • 2021-11-22
  • 1970-01-01
相关资源
最近更新 更多