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

时间:2015-04-24 20:06:05

标签: java sqlite unix-timestamp

我在一个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'))

1 个答案:

答案 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') )"; >=

更新:只要列文本,您需要执行一些额外的步骤:

<

细节:

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