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;