2012-05-02 65 views
2

目前我正在使用查詢生成器從我的數據庫中提取所有記錄,並且它們當前按日組織,但是我按照althabetical順序排序,Android- SQLite查詢使用查詢生成器按天排序結果

public Cursor fetchAll() { 

     return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_MODULECODE, 
     KEY_DAY, KEY_TIME, KEY_DURATION, KEY_TYPE, KEY_ROOM},null, null, null, null,"Day"); 
    }  

我知道一些谷歌搜索後,我需要用自定義搜索順序來替換最後一節。 東西沿着線:

select _id, busnum, 
    case cast (strftime('%w', servdate) as integer) 
     when 0 then 'Sunday' 
     when 1 then 'Monday' 
     when 2 then 'Tuesday' 
     when 3 then 'Wednesday' 
     when 4 then 'Thursday' 
     when 5 then 'Friday' 
     else 'Saturday' end as servdayofweek 
    from tb1 
    where ... 

    From: 
    http://stackoverflow.com/questions/4319302/sqlite-return-as-day-of-week 

到目前爲止,我一直無法弄清楚如何tocombine兩個,並在正確的方向anyhelp將大大aprechiated。

編輯Soloution 感謝您對我聲明字符串,並鏈接到它在查詢的人需要簡單的東西去幫助,這是我最後的代碼,它

public Cursor fetchAll() { 
    String OrderBy ="case Day"+ 
     " when 'Monday' then 0 "+ 
     " when 'Tuesday' then 1"+ 
     " when 'Wednesday' then 2"+ 
     " when 'Thursday' then 3"+ 
     " when 'Friday' then 5"+ 
     " end"; 
return mDb.query(DATABASE_TABLE, new String[] {KEY_ROWID, KEY_MODULECODE, 
     KEY_DAY, KEY_TIME, KEY_DURATION, KEY_TYPE, KEY_ROOM},null, null, null, null,OrderBy); 
}  

回答

1

如果您Day值是一天的名字,那麼你想是這樣的:

order by case Day 
     when 'Sunday' then 0 
     when 'Monday' then 1 
     when 'Tuesday' then 2 
     ... 
     when 'Saturday' then 6 
    end 
在SQL

;請記住,您可以使用幾乎任何表達式來處理SQL ORDER BY。該orderBy參數query可以是任何SQL ORDER BY子句(不order by),所以你想要這個又大又醜的字符串:

"case Day when 'Sunday' then 0 when 'Monday' then 1 ... when 'Saturday' then 6 end" 

作爲最後一個參數來query。當然,您必須正確填寫...

1

如果你不能弄清楚如何通過SQLiteDatabase.query(... lots of variables...)傳遞複雜查詢,只需將您的select語句作爲字符串傳遞給SQLiteDatabase.rawQuery()即可。

例如:

String query = "select _id, busnum, " + 
       " case cast cast (strftime('%w', servdate) as integer) " + 
       ... 
String[] selectionArgs = new String() { yada, yada, yada } 
mDb.rawQuery(query, selectionArgs);