2010-03-09 28 views
118

Tengo una base de datos SQLite que estoy tratando de ordenar por orden alfabético. El problema es, SQLite no parece tener en cuenta A = a durante la clasificación, por lo tanto consigo resultados como este:¿Cómo utilizar la orden SQL Order By para ordenar los resultados sin distinción de mayúsculas y minúsculas?

Un B C T un b c g

me quieren obtener:

a un b B C c g T

¿Qué cosa SQL especial necesita hacerse que no sepa?

SELECT * FROM NOTES ORDER BY title 
+1

Y cuál es la forma más eficiente de hacer ¿eso? "ORDER BY TITLE COLLATE NOCASE" o "ORDER BY LOWER (TITLE)". (Para su información, en mi caso, ejecutando en Android, es decir, SQLite) – Pascal

Respuesta

199

También puede hacer ORDER BY TITLE COLLATE NOCASE.

Editar: Si es necesario especificar ASC o DESC, añadir esto después de NOCASE como

ORDER BY TITLE COLLATE NOCASE ASC

o

ORDER BY TITLE COLLATE NOCASE DESC

+3

¿Es "ORDEN POR TÍTULO COLECCIONAR NOCASE" más eficiente que "ORDEN POR MENOR (TÍTULO)"? – Pascal

+0

¡ESO CHUPA! no es así? ¡Guauu! ¿Por qué diablos el SQLite lo hace sensible a mayúsculas y minúsculas para clasificar ... no cabe en mi mente ... desafortunadamente! – Vincy

+0

@Vincy: No veo qué hay de raro en la comparación de cadenas sensibles a mayúsculas y minúsculas. Así es como los operadores '<', '==', etc. funcionan de manera predeterminada en todos los lenguajes de programación con los que estoy familiarizado. – dan04

84

Sólo puede convertir todo en minúsculas para los fines de la clasificación:

SELECT * FROM NOTES ORDER BY LOWER(title); 

Si desea asegurarse de que las mayúsculas aún así terminar por delante de las minúsculas, sólo tiene que añadir que a medida una clase secundaria:

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

Estoy ordenando por varias columnas, ¿tengo que poner el INFERIOR alrededor de cada uno? – CodeFusionMobile

+2

Sí, no hay forma de cambiar el comportamiento de ORDER BY para que no distinga entre mayúsculas y minúsculas. –

+0

Esta es la respuesta correcta. – firedev

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

Gracias por su respuesta. Pero: una ** buena respuesta ** siempre tendrá una explicación de lo que se hizo y por qué se hizo de esa manera, no solo para el OP sino para los futuros visitantes de SO. –

Cuestiones relacionadas