我已经经历了无数次的帖子,但仍然无法达到预期的效果。Android SQLite日期查询
我的日期/时间戳作为字符串存储在SQLite数据库,其中一个看起来像:太阳4月16日零时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”和“今天”也格式的字符串,看起来一样的存储字符串(“DATE_RECEIVED”)。获得所需功能的任何帮助都是非常有帮助的。
编辑: 我增加了一个附加列“时间戳”节省大纪元值(例如1492337028)及以下功能的伟大工程(只显示了时间戳后事项):
String received = "Received";
String query = "SELECT * FROM " + TABLE_NAME_1
+ " WHERE " + MESSAGE_TYPE + " IN (?)"
+ " AND DATETIME(" + TIMESTAMP + ") >= DATETIME(?)"
+ " ORDER BY " + TIMESTAMP + " DESC";
String[] params = {received, twoDaysAgo};
cursor = database.rawQuery(query, params);
但是,当试图在时间戳记之后搜索项目时,它会在时间戳记之前返回项目,因此如何修改以下函数以仅搜索时间戳记之后的项目?
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);
请勿在编辑的解决方案中使用DATETIME(),然后检查它是否有效。 –