Android-SQLite查询按日使用查询构建器订购结果

时间:2012-05-02 01:16:56

标签: android sqlite sql-order-by query-builder

目前我正在使用查询构建器从我的数据库中提取所有记录,而且它们目前是按天组织的,但我按照althabetical顺序排序,

  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

到目前为止,我一直无法弄清楚如何在正确的方向上将两个和任何帮助联合起来是多么重要。

编辑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 );
}    

2 个答案:

答案 0 :(得分: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);

答案 1 :(得分: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。 queryorderBy参数可以是任何SQL ORDER BY子句(没有order by)所以你想要这个大丑陋的字符串:

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

作为query的最后一个参数。当然,您必须正确填写...