私は無数の投稿を行ってきましたが、依然として望みの結果を達成できていないようです。AndroidのSQLiteの日付のクエリ
私の日付/タイムスタンプは、1つのようになりますSQLiteデータベース内の文字列として格納されます。日4月16日夜12時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」)と同じように見える文字列のフォーマットされます。目的の機能を動作させるための助けがあれば、大きな助けとなります。
EDIT: (ジャストタイムスタンプの後の項目を示して)私はエポック値を保存し、追加の列「TIMESTAMP」(例えば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()を使用しないで、それが動作するかどうかを確認してください。 –