151 votes

Comment utiliser l'instruction SQL Order By pour trier les résultats sans tenir compte de la casse ?

J'ai une base de données SQLite que j'essaie de trier par ordre alphabétique. Le problème est que SQLite ne semble pas prendre en compte A=a pendant le tri, ce qui donne des résultats comme celui-ci :

A B C T a b c g

Je veux avoir :

A a b B C c g T

Quel truc SQL spécial doit être fait dont je ne suis pas au courant ?

SELECT * FROM NOTES ORDER BY title

2 votes

Et quelle est la manière la plus efficace de le faire ? "ORDER BY TITLE COLLATE NOCASE" ou "ORDER BY LOWER(TITLE)". (Pour info, dans mon cas, fonctionnant sur Android, c'est à dire SQLite)

264voto

dan04 Points 33306

Vous pouvez également faire ORDER BY TITLE COLLATE NOCASE .

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

ORDER BY TITLE COLLATE NOCASE ASC

o

ORDER BY TITLE COLLATE NOCASE DESC

10 votes

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

0 votes

Ça craint ! n'est-ce pas ? Wow ! pourquoi diable SQLite le rend sensible à la casse pour le tri.... ne correspond pas à mon esprit... malheureusement !

1 votes

@Vincy : Je ne vois pas ce qu'il y a de si bizarre dans la comparaison de chaînes de caractères sensibles à la casse. C'est ainsi que le < , == etc. fonctionnent par défaut dans tous les langages de programmation que je connais.

107voto

Chad Birch Points 39087

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

SELECT * FROM NOTES ORDER BY LOWER(title);

Si vous voulez vous assurer que les majuscules sont toujours placées avant les minuscules, il suffit de les ajouter comme tri secondaire :

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

1 votes

Je trie par plusieurs colonnes, dois-je mettre le LOWER autour de chaque colonne ?

2 votes

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

1 votes

Y a-t-il une différence entre "UPPER" et "LOWER" ?

1voto

Md Shahriar Points 324
SELECT * FROM NOTES ORDER BY UPPER(title)

-2voto

Smith Points 1711

Vous pouvez utiliser COLLATE

SELECT * FROM NOTES ORDER BY title COLLATE NOCASE;

si vous commandez par ASC vous n'avez pas besoin de mettre là-dedans ASC car il s'agit de la valeur par défaut.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X