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).