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;