我在一个Android应用程序的SQLite数据库中有一个表,其中每一行都有create_date
列指定为unix时间戳。
我有一个查询,我正在尝试添加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日期/时间函数不太熟悉。
修改: 这是我得到的例外。无论是否在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'))
答案 0 :(得分:1)
sql喜欢有很多不错的date time functions,你肯定需要阅读它们,解决你的问题,你可以使用下一个方法
<?php
namespace App\Model;
use Cake\Datasource\EntityTrait;
class Software {
use EntityTrait;
}
注意:比较"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')
)";
和>=
更新:只要列文本,您需要执行一些额外的步骤:
<
细节: