Oracle
 sql >> Datenbank >  >> RDS >> Oracle

So bestellen Sie nach Datum in PostgreSQL oder Oracle

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
Mathematik 2019-12-19
Wissenschaft 2020-01-05
Gesundheit 2020-01-05
Englisch 08.01.2020
Kunst NULL

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 PostgreSQL und in Oracle NULL s werden bei aufsteigender Sortierung zuletzt und bei absteigender Sortierung zuerst angezeigt. Auch die Zeilen mit demselben exam_date werden in zufälliger Reihenfolge angezeigt (möglicherweise sehen Sie Science zweitens und Health drittens oder Gesundheit zweitens und Science Dritter).

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 dem Prüfungsdatum sortieren.

Lösung:

SELECT *
FROM exam
ORDER BY
  exam_year,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')),
  exam_day;

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
Mathematik 2019 Dezember 19
Gesundheit 2020 Januar 5
Wissenschaft 2020 Januar 5
Englisch 2020 Januar 8
Kunst NULL NULL NULL

Diskussion:

Sie müssen die Zeilen nach drei Werten sortieren:dem Jahr, dem Monat und dem Tag, aber um die richtige Reihenfolge zu haben, müssen Sie den Monat in eine Zahl umwandeln ('January ' zu 1 , 'February ' zu 2 , etc.). Andernfalls würden Sie „December sehen ' vor 'January '. Die Funktion TO_DATE(exam_month, 'Month') wandelt den vollständigen Monatsnamen in ein Datum im '0001-MM-01 um ' Format. Sie erhalten beispielsweise „0001-12-01 ' für Dezember.

Sie können jetzt die Funktion EXTRACT(MONTH FROM date) verwenden, um den Monat aus diesem Datumswert zu extrahieren. Der Monat wird als Zahl zurückgegeben.

Wenn Sie diese beiden Funktionen kombinieren, können Sie den Monat als Zahl mit der folgenden Formel erhalten:

EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))

Um die Zeilen nach Datum zu sortieren, müssen Sie nach Jahr, Monat und Tag (in dieser Reihenfolge) sortieren. Wenn Sie die neueste Prüfung zuerst sehen möchten, müssen Sie in absteigender Reihenfolge sortieren. Dazu müssen Sie einen DESC verwenden Schlüsselwort nach jeder Spalte im ORDER BY Klausel.

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC,
  exam_day DESC;