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 | NULL |
Dezember | Januar |
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 EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
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 beginnend mit Januar und endend mit Dezember zu sortieren, müssen Sie den Monat in eine Zahl umwandeln ('January
' bis 1, 'February
' zu 2
, etc.). Andernfalls würden Sie „December
sehen ' vor 'January
'. Die Funktion TO_DATE(birthday_month, 'Month') konvertiert einen vollständigen Monatsnamen in ein Datum im '0001-MM-01
' Format. Sie erhalten beispielsweise „0001-12-01
' für Dezember.
Sie können jetzt die Funktion EXTRACT(MONTH FROM date) verwenden, um den Monat aus diesem Datumswert zu extrahieren. Der Monat ist eine Zahl zwischen 1
und 12
.
Wenn Sie diese beiden Funktionen kombinieren, können Sie den Monat als Zahl mit der folgenden Formel erhalten:
EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
Setzen Sie diesen Ausdruck nach ORDER BY
um die Zeilen nach Monat zu sortieren. Wenn Sie den neuesten Monat zuerst sehen möchten, müssen Sie in absteigender Reihenfolge sortieren. Dazu müssen Sie einen DESC
verwenden Schlüsselwort, etwa so:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
Beachten Sie, dass in PostgreSQL und Oracle NULL
s werden bei aufsteigender Sortierung zuletzt und bei absteigender Sortierung zuerst 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).