Wie verwende ich die SQL Order By-Anweisung, um die Ergebnisse ohne Berücksichtigung der Groß- und Kleinschreibung zu sortieren?


144

Ich habe eine SQLite-Datenbank, die ich nach alphabetischer Reihenfolge sortieren möchte. Das Problem ist, dass SQLite beim Sortieren A = a nicht berücksichtigt, daher erhalte ich folgende Ergebnisse:

A B C T a b c g

Ich möchte bekommen:

A a b B C c g T.

Welche spezielle SQL-Aufgabe muss ausgeführt werden, von der ich nichts weiß?

SELECT * FROM NOTES ORDER BY title

2
Und wie geht das effizienter? "ORDER BY TITLE COLLATE NOCASE" oder "ORDER BY LOWER (TITLE)". (FYI, in meinem Fall läuft auf Android, dh SQLite)
Pascal

Antworten:


253

Sie können auch tun ORDER BY TITLE COLLATE NOCASE.

Bearbeiten: Wenn Sie angeben müssen ASCoder DESC, fügen Sie dies nach NOCASEwie folgt hinzu

ORDER BY TITLE COLLATE NOCASE ASC

oder

ORDER BY TITLE COLLATE NOCASE DESC

8
Ist "ORDER BY TITLE COLLATE NOCASE" effizienter als "ORDER BY LOWER (TITLE)"?
Pascal

DAS IST SCHEISSE! ist es nicht? Beeindruckend! Warum zum Teufel SQLite die Groß- und Kleinschreibung für das Sortieren berücksichtigt ... passt mir nicht in den Sinn ... leider!
Vincy

1
@Vincy: Ich verstehe nicht, was am Vergleich von Zeichenfolgen mit Groß- und Kleinschreibung so seltsam ist. Das ist , wie die <, ==usw. Operatoren arbeitet standardmäßig in jeder Programmiersprache , die ich kenne.
Dan04

@ dan04 wie oft brauchst du eine Zeichenfolge, bei der zwischen Groß- und Kleinschreibung unterschieden werden muss? deshalb ist es lächerlich. Wer in aller Welt kümmert sich beim Sortieren einer Zeichenfolge um Fälle? Der einzige Ort, an dem ich den Vorteil sehe, ist die Authentifizierung oder Passwortüberprüfung! Deshalb muss es standardmäßig CASE INSENSITIVE sein, imo!
Vincy

Dies funktioniert normalerweise nicht sofort, wenn die Datenbank UTF8 verwendet. (Beachten Sie, dass sich der Titel nicht nur auf SQLite bezieht.) In diesem Fall funktioniert der Vorschlag, unten () oder oben () zu verwenden.
Marco

99

Sie können zum Sortieren einfach alles in Kleinbuchstaben konvertieren:

SELECT * FROM NOTES ORDER BY LOWER(title);

Wenn Sie sicherstellen möchten, dass die Großbuchstaben immer noch vor den Kleinbuchstaben stehen, fügen Sie dies einfach als sekundäre Sortierung hinzu:

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

1
Ich sortiere nach mehreren Spalten. Muss ich das UNTERE um jede Spalte setzen?
CodeFusionMobile

2
Ja, es gibt keine Möglichkeit, das Verhalten von ORDER BY so zu ändern, dass die Groß- und Kleinschreibung nicht berücksichtigt wird.
Chad Birch

1
Gibt es einen Unterschied zwischen 'UPPER' und 'LOWER'
Jagadeesh

2
Zu diesem Zweck werden beide nicht den gleichen Effekt erzielen, dh alle Gegenstände sind gleich.
Ben Baron

1
Sie unterscheiden sich nur für die Zeichen [] ^ _ `.
dan04

0
SELECT * FROM NOTES ORDER BY UPPER(title)              

14
Danke für deine Antwort. Aber: Eine gute Antwort wird immer eine Erklärung darüber enthalten, was getan wurde und warum es so getan wurde, nicht nur für das OP, sondern auch für zukünftige Besucher von SO.
B001
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.