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 MySQL 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
Drittens und Health
viertens oder Health
Drittens und Science
vierte).
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 Prüfungsdatum sortieren.
Lösung:
SELECT * FROM exam ORDER BY STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d');
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 |
---|---|---|---|
Kunst | NULL | NULL | NULL |
Mathematik | 2019 | Dezember | 19 |
Gesundheit | 2020 | Januar | 5 |
Wissenschaft | 2020 | Januar | 5 |
Englisch | 2020 | Januar | 8 |
Diskussion:
Um nach Datum zu sortieren, erstellen Sie Datumswerte aus den Jahres-, Monats- und Tageswerten. Verwenden Sie dazu die Funktion STR_TO_DATE(). Wenn Sie ein Datum als Zeichenfolge in „Year Month Day
gespeichert haben ' formatieren, können Sie es mit STR_TO_DATE(date_string, '%Y %M %d')
in ein Datum umwandeln . Aber zuerst müssen Sie mit der Funktion CONCAT() einen String erstellen:
CONCAT(exam_year, ' ', exam_month, ' ', exam_day)
Der CONCAT()
Die Funktion kombiniert alle Argumente zu einem String. Sie müssen Zahlen nicht in Strings umwandeln. Da Sie eine Zeichenfolge im 'Year Month Day
erhalten möchten ' Format sind die Argumente exam_year
, exam_month
, exam_day
, und die Leerzeichen dazwischen.
Anschließend müssen Sie diese Zeichenfolge mithilfe von STR_TO_DATE(date_string, '%Y %M %d')
in ein Datum umwandeln Funktion. Das zweite Argument dieser Funktion ist das Datumsformat. %Y
steht für Jahr, %M
steht für Monat (sein vollständiger Name, keine Zahl) und %d
steht für Tag.
STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d')
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 STR_TO_DATE(CONCAT(exam_year, ' ', exam_month, ' ', exam_day), '%Y %M %d') DESC;