2011-05-11 74 views
60

我想要做的就是按字母顺序抓取所有东西,并忽略大写字母。不区分大小写的字母顺序的SQLite查询

db.rawQuery("SELECT " + catName + " FROM "+tableName+" ORDER BY "+catName+" ASC COLLATE NOCASE;", null); 

这是我上面使用的代码,但它总是给我一个SQLite异常,说COLLATE是一个语法错误。

android.database.sqlite.SQLiteException: near "COLLATE": syntax error: , while compiling: SELECT Artist FROM testTable COLLATE NOCASE ASC

回答

157

COLLATE推移顺序方向前:

db.rawQuery("SELECT " + catName 
      + " FROM " +tableName 
     +" ORDER BY "+catName+" COLLATE NOCASE ASC;", null); 

但你并不需要ASC - 这是默认的,所以你也可以同样使用:

db.rawQuery("SELECT "+ catName 
      +" FROM "+ tableName 
     +" ORDER BY "+ catName +" COLLATE NOCASE;", null); 
+1

SOOOO WEIRD!我以为我尝试了后面的代码,并得到相同的错误...但现在它的工作...我可能只是输入不正确(很可能...非常感谢你! – 2011-05-11 01:13:07

+1

另一个问题,请...有没有在SQLite中忽略重复的方法? – 2011-05-11 01:14:47

+1

@Anthony Honciano:发布一个关于忽略重复的新问题 - 很可能是,但我需要查看有关重复的详细信息。 – 2011-05-11 01:17:17

1

这应该也工作我认为:

db.rawQuery("SELECT "+ catName 
     +" FROM "+ tableName 
    +" ORDER BY lower("+ catName +");", null); 
7

orderBy String后加上COLLATE NOCASE。

db.query(table,columns,selection, selectionArgs,groupBy,having, orderBy +“COLLATE NOCASE ASC”);

在这里,由ASC或DESC命令取决于您的需要。