【问题标题】:SQLite select all records for today and previous daySQLite 选择今天和前一天的所有记录
【发布时间】:2013-01-23 00:48:17
【问题描述】:

我的数据库中有下表:

    database.execSQL("create table " + TABLE_LOGS + " (" 
            + COLUMN_ID + " integer primary key autoincrement," 
            + COLUMN_ID_DAY_EXERCISE + " integer not null,"
            + COLUMN_REPS + " integer not null,"
            + COLUMN_WEIGHT + " real not null,"
            + COLUMN_1RM + " real not null,"
            + COLUMN_DATE + " integer not null"
            + ")");

我在 COLUMN_DATE 字段(整数)中存储了一个 unix 时间戳。

现在我有以下函数可以抓取所有记录:

public Cursor fetchCurrentLogs(long dayExerciseDataID) {
    // where day = today
    Cursor cursor = database.rawQuery("select " + MySQLiteHelper.COLUMN_ID + "," + MySQLiteHelper.COLUMN_REPS + ", " + MySQLiteHelper.COLUMN_WEIGHT + " " +
            "from " + MySQLiteHelper.TABLE_LOGS + " " +
            "where " + MySQLiteHelper.COLUMN_ID_DAY_EXERCISE + " = '" + dayExerciseDataID + "'", null);
    if (cursor != null) { cursor.moveToFirst(); }
    return cursor;
}

现在我想做的是,我想让这个函数只抓取今天的记录。

然后我想使另一个功能完全相同,但是我希望它获取前一天的记录,而不是获取今天的记录。以前,我的意思是最近一天的记录不是今天。所以可能是昨天,也可能是 3 天前,也可能是一个月前。

我知道在 MySQL 中你可以在当天做这样的事情:

where date_format(from_unixtime(COLUMN_DATE), '%Y-%m-%d')= date_format(now(), '%Y-%m-%d')

SQLite 的等价物是什么?

另外,有人可以帮我解决上面提到的前一天的 where 子句吗?

非常感谢。

【问题讨论】:

  • COLUMN_DATE 的值是多少?是在 unix 时间戳中吗?

标签: android sqlite date select


【解决方案1】:

不要在您的 SQL 语句中进行转换。在您的 Java 方法中进行转换。让您的 Java 方法创建完整的 SQL 语句。您所需要的只是一个将 Java DateTime 转换为 unix 格式的函数。

Cursor cursor = database.rawQuery("select " + MySQLiteHelper.COLUMN_ID + "," + MySQLiteHelper.COLUMN_REPS + ", " + MySQLiteHelper.COLUMN_WEIGHT + " " +
            "from " + MySQLiteHelper.TABLE_LOGS + " " +
            "where " + MySQLiteHelper.COLUMN_ID_DAY_EXERCISE + " = '" + dayExerciseDataID + 
            " OR " + MySQLiteHelper.COLUMN_ID_DAY_EXERCISE + " = '" + previousDay(dayExerciseDataID) +
"'", null);

您只需要创建 previousDay 方法。

【讨论】:

    【解决方案2】:
    String sql = "SELECT * FROM myTable WHERE myDate >= date('now','-1 day')"; 
    Cursor mycursor = db.rawQuery(sql);
    

    编辑:

    SELECT * from Table1 where myDate = (select max(myDate) from Table1 WHERE myDate < DATE('now') )
    

    【讨论】:

    • 我只需要选择前一天的记录,而不是所有前一天的记录。明白我的意思了吗?所以假设我在数据库中有今天、3 天前和 6 天前的条目,我想要一个函数获取今天的记录,而另一个函数获取 3 天前的记录。
    • 您好,我需要获取当前日期最后 5 分钟的记录,那么我该如何实现呢? @Yaqub
    【解决方案3】:

    date/time functions documentation

    SELECT *
    FROM MyTable
    WHERE myDate >= date('now', '-1 days')
      AND myDate <  date('now')
    

    【讨论】:

      【解决方案4】:

      可能为时已晚,但它可以帮助某人。我和以前的开发者没有什么不同,我只是想把我的版本放出来,可能它甚至不是最好的......

          String selectQuery = "SELECT * FROM "+Your_table+" 
      WHERE ("+Column_1+" = "+Value_For_Column1+" AND date("+Your_Column_With_Time_Values+") == date('now')) AND 
      
      "+Some_Other_Column+" = "+Some_Other_Value+" OR "+Some_Other_Column+" = "+Some_Other_Value+" ORDER BY "+Your_Column+" DESC";
      

      如果可能有一些错误,很可能是由于字符串连接造成的。 谢谢!!

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-02-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-12-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多