Java Android SQLite日期查询

Java Android SQLite日期查询,java,android,mysql,sqlite,date,Java,Android,Mysql,Sqlite,Date,我已经浏览了无数的帖子,但似乎仍然没有达到预期的效果 我的日期/时间戳作为字符串存储在SQLite数据库中,其中一个看起来像:Sun Apr 16 00:26:33 GMT+01:00 2017 我试图实现的是只检索过去48小时(现在到2天前)存储在数据库中的项目。下面我编写的代码继续返回早于48小时/2天的结果 public Cursor searchInboxEmails(String search, String twoDaysAgo, String today) throws SQLEx

我已经浏览了无数的帖子,但似乎仍然没有达到预期的效果

我的日期/时间戳作为字符串存储在SQLite数据库中,其中一个看起来像:Sun Apr 16 00:26:33 GMT+01:00 2017

我试图实现的是只检索过去48小时(现在到2天前)存储在数据库中的项目。下面我编写的代码继续返回早于48小时/2天的结果

public Cursor searchInboxEmails(String search, String twoDaysAgo, String today) throws SQLException {

    Cursor cursor = null;

    try {
        if (search != null && !search.trim().isEmpty()) {

            String received = "Received";
            search = "%" + search + "%";

            String query = "SELECT * FROM " + TABLE_NAME_1
                    + " WHERE " + MESSAGE_TYPE + " IN (?)"
                    + " AND " + FROM_EMAIL + " LIKE (?) OR " + CC_EMAIL + " LIKE (?) OR "
                    + SUBJECT + " LIKE (?) OR " + MESSAGE + " LIKE (?)"
                    + " AND " + "DATETIME(" + DATE_RECEIVED + ") BETWEEN DATETIME(?) AND DATETIME(?)"
                    + " ORDER BY " + _ID + " DESC";

            String[] params = {received, search, search, search, search, twoDaysAgo, today};
            cursor = database.rawQuery(query, params);

            if (cursor != null) {
                cursor.moveToFirst();
            }
        }

    } catch (Exception e) {
        e.printStackTrace();
    }
    return cursor;
}
值“twoDaysAgo”和“today”也是格式化字符串,看起来与存储字符串(“DATE_RECEIVED”)相同。任何关于使所需功能正常工作的帮助都将是巨大的帮助


编辑:
我添加了一个额外的列“TIMESTAMP”,用于保存历元值(例如149237028),下面的函数非常有用(仅显示时间戳后的项目):

但是,当尝试搜索时间戳之后的项目时,它也会返回时间戳之前的项目,因此如何修改下面的函数以仅搜索时间戳之后的项目

String received = "Received";
            search = "%" + search + "%";

            String query = "SELECT * FROM " + TABLE_NAME_1
                    + " WHERE " + MESSAGE_TYPE + " IN (?)"
                    + " AND " + FROM_EMAIL + " LIKE (?) OR " + CC_EMAIL + " LIKE (?) OR "
                    + SUBJECT + " LIKE (?) OR " + MESSAGE + " LIKE (?)"
                    + " AND DATETIME(" + TIMESTAMP + ") >= DATETIME(?)"
                    + " ORDER BY " + TIMESTAMP + " DESC";

            String[] params = {received, search, search, search, search, twoDaysAgo};
            cursor = database.rawQuery(query, params);

你有两个选择去做你要求的事情

第一个选项:将接收到的日期的数据类型更改为整数,然后以毫秒为单位对其进行初始化。对twoDaysAgo和今天的params也这样做;将它们转换为以毫秒为单位的时间。现在您的查询应该可以工作了


第二个选项:检查问题。您可能需要为此更改时间戳格式,但我不确定。

我添加了一列“timestamp”作为整数-请查看我的更新问题。不要在编辑的解决方案中使用DATETIME(),然后检查它是否有效。
String received = "Received";
            search = "%" + search + "%";

            String query = "SELECT * FROM " + TABLE_NAME_1
                    + " WHERE " + MESSAGE_TYPE + " IN (?)"
                    + " AND " + FROM_EMAIL + " LIKE (?) OR " + CC_EMAIL + " LIKE (?) OR "
                    + SUBJECT + " LIKE (?) OR " + MESSAGE + " LIKE (?)"
                    + " AND DATETIME(" + TIMESTAMP + ") >= DATETIME(?)"
                    + " ORDER BY " + TIMESTAMP + " DESC";

            String[] params = {received, search, search, search, search, twoDaysAgo};
            cursor = database.rawQuery(query, params);