2015-09-04 25 views
-2

我一直試圖在MySQLite android中刪除7天以前的記錄,但沒有成功。我曾嘗試:刪除超過7天的記錄MySQLite android

database.execSQL("delete from " + MySQLite.WORKFLOW_TABLE_NAME + " where '" + MySQLite.WORKFLOW_COLUMN_DATECREATED + 
    "' < 'DATE_SUB(NOW(), INTERVAL 7 DAY)'"); 

database.delete(MySQLite.WORKFLOW_TABLE_NAME, "date('now') > date('" + MySQLite.WORKFLOW_COLUMN_DATECREATED + "', '+7 days')", 
    null); 

database.delete(MySQLite.WORKFLOW_TABLE_NAME, MySQLite.WORKFLOW_COLUMN_DATECREATED + " < '" 
    + dateFormat.format(range.getTime()) + "'", null); 

和這些非正常工作。

SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy/MM/dd"); 
ContentValues values = new ContentValues(); 
values.put(MySQLite.WORKFLOW_COLUMN_DATECREATED, dateFormat.format(convertStringToDate(Data.State.tripdate))); 

表的日期列創建爲:我使用的保存日期到表 WORKFLOW_COLUMN_DATECREATED +「文本不爲空,」

和字符串轉換成日期與:

public Date convertStringToDate(String dateString) 
{ 
SimpleDateFormat formatter = new SimpleDateFormat("yyyy/MM/dd"); 
Date date = null; 
try { 

    date = formatter.parse(dateString); 
    System.out.println(date); 
    System.out.println(formatter.format(date)); 

} catch (ParseException e) { 
    e.printStackTrace(); 
} 
return date; 

}

有人helppp。

+1

請閱讀文檔:1.有SQLite中沒有DateTime類型... 2.'SELECT date('now')'格式爲'yyyy-MM-dd'返回日期3.字符串比較''''''''''...顯然這個非常天真的解決方案是通過格式化「日期現在-7天「,並將它作爲字符串在sql中進行比較(因爲日期時間字符串的格式爲」yyyy/MM/dd「,與字符串相同) – Selvin

回答

0

Android使用SQLite,而不是MySQL。您可能需要熟悉一組不同的date and time functions

我的首選是始終將日期和時間存儲爲long值(從epoch開始的毫秒數),因爲這對於任何比較都更爲方便,並且使用Java類(如Java類)可以很容易地轉換爲格式化日期字符串和從中格式化日期字符串CalendarDateFormat

做不到這一點,我建議你存儲日期的形式yyyy-MM-dd,因爲這是對TIMESTRING格式的SQLite在上面的鏈接的各種日期和時間函數接受一個。然後,您可以輕鬆地將日期轉換爲與STRFTIME('%s')相似的值(自時代以來以秒爲單位)。本質上,聲明是這樣的:

DELETE FROM table WHERE STRFTIME('%s', column) < STRFTIME('%s', 'now', '-7 days');

如果做不到這一點,你可以使用一些字符串處理函數到當前的日期轉換成東西可以作爲參數傳遞給STRFTIME。假設您的所有值都是yyyy/MM/dd,則可以使用REPLACE函數將它們轉換爲yyyy-MM-dd。裏面的上述說法,它看起來是這樣的:

DELETE FROM table WHERE STRFTIME('%s', REPLACE(column, '/', '-')) < STRFTIME('%s', 'now', '-7 days');

這是我會怎麼做它在Java中:

String selection = "STRFTIME('%s', REPLACE(" + MySQLite.WORKFLOW_COLUMN_DATECREATED 
     + ", '/', '-')) < STRFTIME('%s', 'now', '-7 days')"; 
int numDeleted = database.delete(MySQLite.WORKFLOW_TABLE_NAME, selection, null);