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;