65

All I want to do is grab the stuff in alphabetical order and ignore the capital letters.

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

This is the code I'm using above, but it always gives me an SQLite exception saying that COLLATE is a syntax error.

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

OMG Ponies
  • 300,587
  • 73
  • 490
  • 482
Anthony Honciano
  • 1,513
  • 5
  • 23
  • 30

3 Answers3

167

COLLATE goes before the order direction:

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

But you don't need the ASC -- that's the default so you could just as well use:

db.rawQuery("SELECT "+ catName 
            +" FROM "+ tableName 
        +" ORDER BY "+ catName +" COLLATE NOCASE;", null);
OMG Ponies
  • 300,587
  • 73
  • 490
  • 482
  • 1
    SOOOO WEIRD! I thought I tried the latter code and got the same error...but now it works...I probably just had it typed incorrectly (most likely... THANK YOU VERY MUCH! – Anthony Honciano May 11 '11 at 01:13
  • 1
    Another question please... Is there a way to ignore duplicates in SQLite? – Anthony Honciano May 11 '11 at 01:14
  • 1
    @Anthony Honciano: Post a new question about ignoring duplicates - very likely yes, but I'd need to see the details about the duplication. – OMG Ponies May 11 '11 at 01:17
7

add COLLATE NOCASE after orderBy String.

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

here, order by ASC or DESC depends on your need.

minhazur
  • 4,670
  • 3
  • 23
  • 25
2

This should work too I think:

db.rawQuery("SELECT "+ catName 
        +" FROM "+ tableName 
    +" ORDER BY lower("+ catName +");", null);
dudeman
  • 491
  • 3
  • 11