0

私は別の問題 DBAdapter.javaを持っています:

public Cursor getTotalFlightTime_Custom() throws SQLException{
return db.rawQuery("SELECT time(sum(strftime('%s', Total_Flight_Time) - strftime('%s','00:00:00')),'unixepoch') FROM Flights WHERE Date BETWEEN '01/01/2012' AND '01/02/2012'",null);
}

MainActivity.java :

private void CustomReport(){
        DBHelper.open();

        TextView txt = (TextView)findViewById(R.id.lblReportTotalFlightTimeAUTO);
        Cursor cursor = DBHelper.getTotalFlightTime_Custom();
        cursor.moveToFirst();
        String[] names = cursor.getColumnNames();
        String AUTO = cursor.getString(cursor.getColumnIndex(names[0]));
    if(AUTO == "")
        txt.setText("00:00:00");
    else
        txt.setText(AUTO);

}

問題は、クエリが機能していないことです。01/01/2012から01/02/2012 (DD/MM/YYYY)までのDate列を持つ行について、列Total_Flight_Time、テーブルFlightsからSUMを返すクエリが必要です。YYYY-MM-DD 形式も試してみましたが、メッセージが表示されずにプログラムがクラッシュしました。

問題がどこにあるかはわかっていると思いますが、よくわかりません:

WHERE Date BETWEEN '01/01/2012' AND '01/02/2012'

しかし、私はそれを修正する方法がわかりません。クエリの他の部分は正しいはずです。なぜなら、同じ列でテーブル全体に使用したため、期待どおりに機能するからです。

EIDT:データ列はINTEGERとして格納されます

手伝って頂けますか?アドバイスありがとうございます:D

コメント コード:

String dateStringfrom = "01/01/2012";
            String dateStringto = "01/02/2012";
            SimpleDateFormat dateFormat = new SimpleDateFormat("dd/MM/yyyy");
            Date convertedDatefrom = new Date();
            Date convertedDateto = new Date();
            try {
                convertedDatefrom = dateFormat.parse(dateStringfrom);
                convertedDateto = dateFormat.parse(dateStringto);

            } catch (ParseException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
            System.out.println(convertedDatefrom);
            System.out.println(convertedDateto);
            Log.d("Converted From","result: " + convertedDatefrom);
            Log.d("Converted To","result: " + convertedDateto);
4

1 に答える 1

1

DateTime列は、SQLite 用numericではなく、する必要があります。integer

http://www.sqlite.org/datatype3.html

条件で機能させるには、文字列を日付に変換する必要があります。

SELECT * FROM Table WHERE DateField BETWEEN Date('01/01/2012') AND Date('01/02/2012')

編集:これが役立つかどうかはわかりませんが、試してみてください。

SELECT strftime('%s',Total_Flight_Time)-strftime('%s','00:00:00') AS TimeDelta, SUM(TimeDelta) AS TimeSum, time(TimeSum,'unixepoch') AS FlightTime FROM Flights WHERE Date BETWEEN Date('01/01/2012') AND Date('01/02/2012')

于 2013-07-14T22:19:13.363 に答える