2013-07-14 82 views
0

我有一個其他問題 DBAdapter.java運行查詢與數據條件SQLite的

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

} 

的問題是,該查詢不起作用。 我婉查詢從列Total_Flight_Time,表返回SUM機票在HH:MM:與01/01/201201/02/2012之間日期列線SS格式(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

DateTime列應numeric和SQLite的不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')

+0

我曾與日截止日嘗試,但我有同樣的問題。 另外,你可以告訴我所有的功能應該是什麼樣子? * =時間(總和(...))以及我還有什麼? – Iosif

+0

或者我可以將日期之間的數據複製到另一個表中?如果是的話,該怎麼做? – Iosif

+0

@losif我不是一個很大的SQLite用戶,但是'SUM'只適用於組。你的時間表達可能不會創建一個組。您可能必須將該表達式分配給別名字段,而不是該字段的「SUM」。看我的編輯。至少它會讓你看到表達式的組件。這可能有助於弄清楚什麼是錯誤的。 – cgTag