从 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)
)";
详情:
- 您需要先将列中的数据转换为整数
- 你的值是毫秒,但是sqllite更喜欢秒,所以你必须除以1000
- 日期函数的输出是字符串,所以我们也需要将其转换为整数
我在 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)
)";
详情:
- 您需要先将列中的数据转换为整数
- 你的值是毫秒,但是sqllite更喜欢秒,所以你必须除以1000
- 日期函数的输出是字符串,所以我们也需要将其转换为整数