SQLite查询按非大小写字母顺序排序

66

我想要做的就是按字母顺序获取内容并忽略大写字母。

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

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

android.database.sqlite.SQLiteException: 在编译时:"SELECT Artist FROM testTable COLLATE NOCASE ASC"附近"COLLATE": 语法错误:

3个回答

169

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
太奇怪了!我以为我尝试了后面的代码,并且得到了相同的错误...但现在它可以工作了...我可能只是打错了(很可能...非常感谢!) - Anthony Honciano
1
还有一个问题,请问……SQLite 是否有忽略重复项的方法? - Anthony Honciano
1
@Anthony Honciano:发布一个关于忽略重复项的新问题 - 很可能是可以的,但我需要看到有关重复的详细信息。 - OMG Ponies

9
在 orderBy 字符串后面添加 COLLATE NOCASE
db.query(table, columns, selection,
        selectionArgs, groupBy, having,
        orderBy + " COLLATE NOCASE ASC");

在这里,按升序或降序排序取决于您的需求。

3

我觉得这个也应该可以工作:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接