2010-03-09 5 views
118

J'ai une base de données SQLite que j'essaie de trier par ordre alphabétique. Le problème est, SQLite ne semble pas considérer A = pendant le tri, donc j'obtenir des résultats comme celui-ci:Comment utiliser l'instruction SQL Order By pour trier les résultats en tenant compte de la casse?

A B C T a b c g

Je veux obtenir:

a a b b C c g T

Quelle chose spéciale de SQL doit être faite que je ne sais pas?

SELECT * FROM NOTES ORDER BY title 
+1

Et quelle est la façon de faire plus efficace il? "ORDER BY TITLE COLLATE NOCASE" ou "ORDER BY LOWER (TITLE)". (FYI, dans mon cas, fonctionnant sur Android, c'est-à-dire SQLite) – Pascal

Répondre

199

Vous pouvez également faire ORDER BY TITLE COLLATE NOCASE.

Edit: Si vous devez spécifier ASC ou DESC, ajoutez après NOCASE comme

ORDER BY TITLE COLLATE NOCASE ASC

ou

ORDER BY TITLE COLLATE NOCASE DESC

+3

Est-ce que "ORDER BY TITLE COLLATE NOCASE" est plus efficace que "ORDER BY LOWER (TITLE)"? – Pascal

+0

QUI SUCE! n'est-ce pas? Hou la la! pourquoi le diable SQLite rend la casse sensible pour le tri .... ne me va pas dans l'esprit ... malheureusement! – Vincy

+0

@Vincy: Je ne vois pas ce qui est si étrange à propos de la comparaison de chaînes sensible à la casse. C'est ainsi que les opérateurs '<', '==', etc. fonctionnent par défaut dans tous les langages de programmation que je connais. – dan04

84

Vous pouvez simplement convertir tout en minuscules pour les besoins de tri:

SELECT * FROM NOTES ORDER BY LOWER(title); 

Si vous voulez vous assurer que les majuscules finissent toujours en avance sur les minuscules, il suffit d'ajouter que un tri secondaire:

SELECT * FROM NOTES ORDER BY LOWER(title), title; 
+1

Je trier par plusieurs colonnes, dois-je mettre le BAS autour de chacun? – CodeFusionMobile

+2

Oui, il n'y a aucun moyen de modifier le comportement de ORDER BY pour qu'il soit insensible à la casse. –

+0

Ceci est la bonne réponse. – firedev

0
SELECT * FROM NOTES ORDER BY UPPER(title)    
+7

Merci pour votre réponse. Mais: Une ** bonne réponse ** aura toujours une explication de ce qui a été fait et pourquoi cela a été fait de telle manière, non seulement pour le PO mais pour les futurs visiteurs de SO. –

Questions connexes