Problem:
Sie möchten die Zeilen nach Datum sortieren.
Beispiel 1:
Die exam Tabelle hat zwei Spalten, subject und exam_date .
| Betreff | Prüfungsdatum |
|---|---|
| Mathematik | 2019-12-19 |
| Englisch | 08.01.2020 |
| Wissenschaft | 2020-01-05 |
| Gesundheit | 2020-01-05 |
| Kunst | NULL |
Sie möchten die Zeilen nach exam_date sortieren .
Lösung:
SELECT * FROM exam ORDER BY exam_date;
Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach exam_date sortiert ):
| Betreff | Prüfungsdatum |
|---|---|
| Mathematik | 2019-12-19 |
| Wissenschaft | 2020-01-05 |
| Gesundheit | 2020-01-05 |
| Englisch | 08.01.2020 |
| Kunst | NULL |
Diskussion:
Verwenden Sie den ORDER BY Schlüsselwort und den Namen der Spalte, nach der Sie sortieren möchten. Auf diese Weise sortieren Sie die Daten in aufsteigender Reihenfolge nach dieser Spalte. Sie können auch den ASC verwenden Schlüsselwort, um deutlich zu machen, dass die Reihenfolge aufsteigend ist (das früheste Datum wird zuerst angezeigt, das späteste Datum wird zuletzt angezeigt usw.).
SELECT * FROM exam ORDER BY exam_date ASC;
Wenn Sie das neueste Datum zuerst und das früheste Datum zuletzt sehen möchten, müssen Sie in absteigender Reihenfolge sortieren. Verwenden Sie den DESC Schlüsselwort in diesem Fall.
SELECT * FROM exam ORDER BY exam_date DESC;
Beachten Sie, dass in PostgreSQL und in Oracle NULL s werden bei aufsteigender Sortierung zuletzt und bei absteigender Sortierung zuerst angezeigt. Auch die Zeilen mit demselben exam_date werden in zufälliger Reihenfolge angezeigt (möglicherweise sehen Sie Science zweitens und Health drittens oder Gesundheit zweitens und Science Dritter).
Beispiel 2:
Die exam Tabelle hat die folgenden Spalten:subject , exam_year , exam_month und exam_day . Die Monate werden in Namen angegeben, nicht in Zahlen.
| Betreff | Prüfungsjahr | Prüfungsmonat | Prüfungstag |
|---|---|---|---|
| Mathematik | 2019 | Dezember | 19 |
| Englisch | 2020 | Januar | 8 |
| Wissenschaft | 2020 | Januar | 5 |
| Gesundheit | 2020 | Januar | 5 |
| Kunst | NULL | NULL | NULL |
Sie möchten die Zeilen nach dem Prüfungsdatum sortieren.
Lösung:
SELECT * FROM exam ORDER BY exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach exam_year sortiert , exam_month und exam_date ):
| Betreff | Prüfungsjahr | Prüfungsmonat | Prüfungstag |
|---|---|---|---|
| Mathematik | 2019 | Dezember | 19 |
| Gesundheit | 2020 | Januar | 5 |
| Wissenschaft | 2020 | Januar | 5 |
| Englisch | 2020 | Januar | 8 |
| Kunst | NULL | NULL | NULL |
Diskussion:
Sie müssen die Zeilen nach drei Werten sortieren:dem Jahr, dem Monat und dem Tag, aber um die richtige Reihenfolge zu haben, müssen Sie den Monat in eine Zahl umwandeln ('January ' zu 1 , 'February ' zu 2 , etc.). Andernfalls würden Sie „December sehen ' vor 'January '. Die Funktion TO_DATE(exam_month, 'Month') wandelt den vollständigen Monatsnamen in ein Datum im '0001-MM-01 um ' 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 wird als Zahl zurückgegeben.
Wenn Sie diese beiden Funktionen kombinieren, können Sie den Monat als Zahl mit der folgenden Formel erhalten:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
Um die Zeilen nach Datum zu sortieren, müssen Sie nach Jahr, Monat und Tag (in dieser Reihenfolge) sortieren. Wenn Sie die neueste Prüfung zuerst sehen möchten, müssen Sie in absteigender Reihenfolge sortieren. Dazu müssen Sie einen DESC verwenden Schlüsselwort nach jeder Spalte im ORDER BY Klausel.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;