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 ExamDate;
Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach ExamDate
sortiert ):
Betreff | Prüfungsdatum |
---|---|
Kunst | NULL |
Wissenschaft | 2020-01-05 |
Gesundheit | 2020-01-05 |
Englisch | 08.01.2020 |
Mathematik | 2019-12-19 |
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 ExamDate 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 ExamDate DESC;
Beachten Sie, dass in T-SQL NULL
s werden bei aufsteigender Sortierung zuerst und bei absteigender Sortierung zuletzt angezeigt. Auch die Zeilen mit demselben ExamDate
werden in nicht deterministischer 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
. Der Monat wird namentlich angegeben, nicht nummeriert.
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 Prüfungsdatum sortieren.
Lösung:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE);
Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach ExamYear
sortiert). , ExamMonth
und ExamDate
):
Betreff | Prüfungsjahr | PrüfungsMonat | Prüfungstag |
---|---|---|---|
Kunst | NULL | NULL | NULL |
Gesundheit | 2020 | Januar | 5 |
Wissenschaft | 2020 | Januar | 5 |
Englisch | 2020 | Januar | 8 |
Mathematik | 2019 | Dezember | 19 |
Diskussion:
Um nach Datum zu gruppieren, erstellen Sie Datumswerte aus den Jahres-, Monats- und Tageswerten. Verwenden Sie dazu die Funktion CAST(). Wenn Sie ein Datum als Zeichenfolge in der Datei „YYYY-Month-DD
gespeichert haben ' formatieren, können Sie es mit CAST(date_string AS date)
in ein Datum umwandeln . Zuerst müssen Sie einen String erstellen, ebenfalls mit der Funktion CAST():
CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2))
Der Ausdruck CAST(ExamYear AS VARCHAR(4))
erzeugt einen String aus der in ExamYear
gespeicherten Zahl . Der Ausdruck CAST(ExamDay AS VARCHAR(2))
erstellt einen String aus der in ExamDay
gespeicherten Zahl . ExamMonth
ist bereits ein String, also muss er nicht gecastet werden.
Dann müssen Sie diesen String mit CAST(date_string AS date)
in ein Datum umwandeln Funktion:
CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE)
Verwenden Sie es mit einem ORDER BY
-Klausel, um die Zeilen in aufsteigender Reihenfolge nach Datum zu sortieren. Wenn Sie die Zeilen in absteigender Reihenfolge sehen möchten, hängen Sie einfach ein DESC
an Schlüsselwort, etwa so:
SELECT * FROM Exam ORDER BY CAST( CAST(ExamYear AS VARCHAR(4)) + '-' + ExamMonth + '-' + CAST(ExamDay AS VARCHAR(2)) AS DATE) DESC;