8

データベースに次のテーブルがあります。

    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"
            + ")");

UNIXタイムスタンプをCOLUMN_DATEフィールド(整数)に格納します。

これで、すべてのレコードを取得する次の関数ができました。

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日前、または1か月前の可能性があります。

私はMySQLであなたが今日のためにこのようなことをすることができることを知っています:

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

SQLiteのこれに相当するものは何ですか?

また、上記のように前日のwhere句を手伝ってくれる人はいますか?

本当にありがとう。

4

4 に答える 4

21
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') )
于 2013-02-07T14:42:32.867 に答える
6

日付/時刻関数のドキュメントを参照してください。

SELECT *
FROM MyTable
WHERE myDate >= date('now', '-1 days')
  AND myDate <  date('now')
于 2013-02-07T16:05:03.880 に答える
0

手遅れかもしれませんが、誰かを助けることができます。私は以前の開発者と同じようにやっています、私は自分のバージョンを置きたかっただけで、おそらくそれは最高ではありません...

    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";

間違いがある場合は、文字列の連結が原因である可能性があります。ありがとうございました!!

于 2016-11-08T13:28:27.657 に答える
-2

SQLステートメントで変換を行わないでください。Javaメソッドで変換を行います。Javaメソッドに完全なSQLステートメントを作成させます。必要なのは、JavaDateTimeを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メソッドを作成する必要があります。

于 2013-02-07T13:49:46.023 に答える