2

目前我正在使用查询生成器从我的数据库中提取我的所有记录,它们目前按天组织,但是我按字母顺序排列,

  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

到目前为止,我一直无法弄清楚如何将两者结合起来,并且在正确方向上的任何帮助都会非常有用。

编辑解决方案感谢您帮助我声明字符串并在查询中为任何需要简单的人链接到它这是我的最终代码

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

2 回答 2

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);
于 2012-05-02T01:24:17.090 回答
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 任何表达式。to的orderBy参数query可以是任何 SQL ORDER BY 子句(没有order by),所以你想要这个丑陋的大字符串:

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

作为query. 当然,您必须正确填写...

于 2012-05-02T01:27:00.203 回答