SQLite
 sql >> Datenbank >  >> RDS >> SQLite

So bestellen Sie nach Datum in SQLite

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 SQLite 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 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 . 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

Lösung:

SELECT *
FROM exam
ORDER BY exam_year,
 (CASE exam_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END),
  exam_day;

Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach exam_year sortiert , exam_month und exam_day ):

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 die Zeilen nach Prüfungsdatum zu sortieren, müssen Sie zuerst nach Jahr, dann nach numerischem Monat (nicht Monatsname) und schließlich nach Tag sortieren. Sie können Monatsnamen mit einem CASE WHEN in numerische Monate umwandeln Klausel. Nach dem CASE Schlüsselwort geben Sie den Namen der Spalte an. Geben Sie dann nach jedem WHEN den Wert in dieser Spalte an, verwenden Sie das Schlüsselwort THEN und geben Sie den neuen Wert an, den Sie anstelle des alten zuweisen möchten. Hier ist die Spalte exam_month , sind die aktuellen Werte in dieser Spalte 'January ', 'February ', …, 'December ', und die neuen Werte sind die numerischen Monate 1 , 2 , …, 12 . Nachdem Sie alle Werte konvertiert haben, denken Sie daran, das END zu verwenden Schlüsselwort zum Schließen des CASE WHEN Klausel. Schau mal:

CASE exam_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

So wandeln Sie einen Monatsnamen in eine Monatszahl um. Sie können es verwenden, wenn Sie die Zeilen nach Datum sortieren, also nach Jahr, numerischem Monat und Tag.

ORDER BY exam_year,
 (CASE exam_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END),
  exam_day

Auf diese Weise können Sie die Zeilen aufsteigend nach Datum sortieren. Der NULL s wird zuerst angezeigt. Um die Reihenfolge auf absteigend zu ändern, verwenden Sie DESC Schlüsselwort nach jeder Spalte im ORDER BY Klausel. So sollte die gesamte Abfrage aussehen:

SELECT *
FROM exam
ORDER BY
  exam_year DESC,
  (CASE exam_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) DESC,
  exam_day DESC;

Beachten Sie, dass beim Sortieren in absteigender Reihenfolge in SQLite NULL s werden zuletzt angezeigt.