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 |
---|---|
Kunst | NULL |
Mathematik | 2019-12-19 |
Wissenschaft | 2020-01-05 |
Gesundheit | 2020-01-05 |
Englisch | 08.01.2020 |
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 SQLite NULL
s werden bei aufsteigender Sortierung zuerst und bei absteigender Sortierung zuletzt angezeigt. Auch die Zeilen mit demselben exam_date
werden in zufälliger Reihenfolge angezeigt (möglicherweise sehen Sie Science
zweitens und Health
Drittens oder Health
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 |
Lösung:
SELECT * FROM exam ORDER BY exam_year, (CASE exam_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), exam_day;
Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach exam_year
sortiert , exam_month
und exam_day
):
Betreff | Prüfungsjahr | Prüfungsmonat | Prüfungstag |
---|---|---|---|
Kunst | NULL | NULL | NULL |
Mathematik | 2019 | Dezember | 19 |
Gesundheit | 2020 | Januar | 5 |
Wissenschaft | 2020 | Januar | 5 |
Englisch | 2020 | Januar | 8 |
Diskussion:
Um die Zeilen nach Prüfungsdatum zu sortieren, müssen Sie zuerst nach Jahr, dann nach numerischem Monat (nicht Monatsname) und schließlich nach Tag sortieren. Sie können Monatsnamen mit einem CASE WHEN
in numerische Monate umwandeln Klausel. Nach dem CASE
Schlüsselwort geben Sie den Namen der Spalte an. Geben Sie dann nach jedem WHEN den Wert in dieser Spalte an, verwenden Sie das Schlüsselwort THEN und geben Sie den neuen Wert an, den Sie anstelle des alten zuweisen möchten. Hier ist die Spalte exam_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 exam_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, wenn Sie die Zeilen nach Datum sortieren, also nach Jahr, numerischem Monat und Tag.
ORDER BY exam_year, (CASE exam_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), exam_day
Auf diese Weise können Sie die Zeilen aufsteigend nach Datum sortieren. Der NULL
s wird zuerst angezeigt. Um die Reihenfolge auf absteigend zu ändern, verwenden Sie DESC
Schlüsselwort nach jeder Spalte im ORDER BY
Klausel. So sollte die gesamte Abfrage aussehen:
SELECT * FROM exam ORDER BY exam_year DESC, (CASE exam_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, exam_day DESC;
Beachten Sie, dass beim Sortieren in absteigender Reihenfolge in SQLite NULL
s werden zuletzt angezeigt.