2012-05-02 36 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);