Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So bestellen Sie nach Datum in MySQL

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;