使用数据条件Sqlite运行查询

时间:2013-07-14 21:55:45

标签: android sqlite android-sqlite

我有另一个问题 的 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);

}

问题是查询无效。 我希望查询返回 SUM Total_Flight_Time ,表航班以HH:MM:SS格式返回日期< / strong> 01/01/2012 01/02/2012 之间的列(DD / MM / YYYY)。我也尝试过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);

1 个答案:

答案 0 :(得分:1)

对于SQLite,

DateTime列应为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')