从 SQLite 数据库中获取当月所有 Unix 时间戳

Get All Unix timestamps from SQLite database within current month

我在 SQLite 数据库中有一个 table 用于 Android 应用程序,其中每一行都有一个指定为 unix 时间戳的 create_date 列。

我有一个查询,我正在尝试向其添加 WHERE 子句。我需要将时间戳与代表本月的值进行比较。

这是我在更改之前的查询:

  String query = "SELECT "
              + "SUM(" + MySQLiteHelper.COLUMN_GAS_CHARGE + ") AS allCharges "
              + "FROM " + MySQLiteHelper.TABLE_GAS + " ";

我要加一个:

 "WHERE " + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + " = (this month)";

这是我不确定的最后一部分。我基本上想要创建所有行这个日历月(不是过去 30 天)。

我想也许我可以从 Calendar 实例中获取当前月份的整数(我知道该怎么做),然后可以使用 SQLite 函数从时间戳。然后我意识到这不会只考虑当年——它会得到 任何 年的同一个月,这不是我需要的。

我有办法做到这一点吗?我不太熟悉 SQLite date/time 函数。

编辑: 这是我得到的一个例外。我在 SQL.

中有或没有 `CAST~ 得到这个
04-24 13:46:50.412: E/AndroidRuntime(26631): android.database.sqlite.SQLiteException: near "CAST": syntax error (code 1): , while compiling: SELECT SUM(gas) AS allCharges FROM gas WHERE (CAST(timestamp as integer) >= date('now','start of month') CAST(timestamp as integer) < date('now','start of month','+1 month'))

sql 喜欢有一堆不错的 date time functions 你肯定需要阅读它们,要解决你的问题你可以使用下一个方法

"WHERE (
date(" + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + ") >= date('now','start of month')
AND
date(" + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + ") < date('now','start of month','+1 month')
)";

注意:>=< 比较

更新:一旦列显示文本,您就需要执行一些额外的步骤:

"WHERE (
CAST(" + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + " AS INT)/1000 >= CAST(strftime('%s', date('now','start of month')) AS INT)
AND
CAST(" + MySQLiteHelper.COLUMN_GAS_CREATE_DATE + " AS INT)/1000 < CAST(strftime('%s', date('now','start of month','+1 month')) AS INT)
)";

详情:

  1. 您需要先将列中的数据转换为整数
  2. 你的值是毫秒,但是sqllite更喜欢秒,所以你必须除以1000
  3. 日期函数的输出是字符串,所以我们也需要将其转换为整数