Problem:
Sie möchten die Zeilen nach Monatsnummer und gegebenen Monatsnamen sortieren (Januar soll zuerst angezeigt werden, Dezember zuletzt).
Beispiel:
Der birthday
Tabelle enthält zwei Spalten:name und birthday_month
. Die Monate werden in Namen angegeben, nicht in Zahlen.
name | Geburtstagsmonat |
---|---|
Ronan Tisha | Januar |
Dezember | April |
Angie Julia | April |
Narelle Dillan | April |
Purdie Casey | Januar |
Donna Nell | NULL |
Blaze Graeme | Oktober |
Sie möchten die Zeilen nach birthday_month
sortieren .
Lösung:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END);
Das Ergebnis sieht so aus (die Zeilen sind in aufsteigender Reihenfolge nach birthday_month
sortiert ):
name | Geburtstagsmonat |
---|---|
Purdie Casey | Januar |
Angie Julia | April |
Narelle Dillan | April |
Blaze Graeme | Oktober |
Ronan Tisha | Januar |
Dezember | NULL |
Donna Nell | NULL |
Diskussion:
Um die Zeilen nach Monat zu sortieren, benötigen Sie die Monate in Zahlen (nicht Namen). Mit dem CASE WHEN
können Sie Monatsnamen in numerische Monate umwandeln Klausel. Nach dem CASE
Schlüsselwort geben Sie den Namen der Spalte an. Dann nach jedem WHEN
, geben Sie den Wert in dieser Spalte an, verwenden Sie den THEN
Schlüsselwort und geben Sie den neuen Wert an, den Sie anstelle des alten zuweisen möchten. Hier ist die Spalte birthday_month
, sind die aktuellen Werte in dieser Spalte 'January
', 'February
', …, 'December
', und die neuen Werte sind die numerischen Monate 1
, 2,
…, 12
. Nachdem Sie alle Werte konvertiert haben, denken Sie daran, das END
zu verwenden Schlüsselwort zum Schließen des CASE WHEN
Klausel. Schau mal:
CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
So wandeln Sie einen Monatsnamen in eine Monatszahl um. Sie können es verwenden, um die Zeilen in aufsteigender Reihenfolge nach Monat zu sortieren – verwenden Sie es einfach im ORDER BY
Klausel.
Beachten Sie, dass in SQLite NULL
s werden bei aufsteigender Sortierung zuerst und bei absteigender Sortierung zuletzt angezeigt. Auch die Zeilen mit demselben birthday_month
werden in zufälliger Reihenfolge angezeigt (möglicherweise sehen Sie Angie Julia
zweitens und Narelle Dillan
drittens oder Narelle Dillan
zweitens und Angie Julia
Dritter). Um die Reihenfolge auf absteigend zu ändern, verwenden Sie DESC
Stichwort nach der Spalte im ORDER BY
Klausel. So sollte die Abfrage aussehen:
SELECT * FROM birthday ORDER BY (CASE birthday_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC;