2012-02-01 8 views
10

J'ai données dans ma base de données comme celle-ci:requête Android SQLiteDatabase tri

Alice 
anderson 
Beatrice 
benny 
Carmen 
calzone 

En utilisant ce code:

mDb.query(DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
      KEY_NAME }, null, null, 
      null, null, KEY_NAME+ " ASC"); 

ou ce code avec le filtre étant "":

mDb.query(true, DATABASE_NAMES_TABLE, new String[] { KEY_ROWID, 
     KEY_NAME }, KEY_NAME + " LIKE ?", 
     new String[] { filter+"%" }, null, null, null, 
     null); 

Il trie les données ci-dessus comme ceci:

Alice 
Beatrice 
Carmen 
anderson 
benny 
calzone 

Est-ce un comportement normal? Comment puis-je l'amener à trier dans l'ordre ci-dessus où tous les As et Bs et C sont ensemble? Merci.

Répondre

9

Vous pouvez spécifier la sensibilité à la casse en ajoutant COLLATE NOCASE, soit dans votre clause ORDER BY, soit (de préférence) lorsque vous créez la table elle-même dans votre déclaration de cette colonne particulière.

+0

Cela fonctionne! Merci! – Maurice

12

SQL utilise emplacement ASCII pour trier donc vous devriez utiliser "colligées" d'une certaine façon ...

Quelque chose dans la nature:

ORDER BY YourColumn Collate NOCASE 

ou

ORDER BY YourColumn Collate SQL_Latin1_General_CP850_BIN 
+0

Votre réponse est également correcte, mais EboMike y est arrivé en premier. :) Merci bien que vous étiez sur place! – Maurice

+1

+1 de moi si! – EboMike

1

curseur c = db.query (VOTRE_NOM_TABLE, NULL, NULL, NULL, NULL, NULL, YOUR_COLOMN_NAME + "Assembler NOCASE");

+0

Pouvez-vous expliquer un peu plus? –

+0

dans mon cas, je veux afficher 'nom' de ma table 'formulaire' dans l'ordre, donc j'ai utilisé ..--> Curseur c = db.query ("formulaire", null, null, null, null, null, "nom Collate NOCASE"); Et puis ---> while (c.moveToNext()) {String studentname = c.getString (0) .toString()} Remarque: - 'nom' est mon premier nom dans la base de données. – user2786249

Questions connexes