Database
 sql >> Datenbank >  >> RDS >> Database

So bestellen Sie nach Datum in T-SQL

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 ExamDate;

Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach ExamDate sortiert ):

Betreff Prüfungsdatum
Kunst NULL
Wissenschaft 2020-01-05
Gesundheit 2020-01-05
Englisch 08.01.2020
Mathematik 2019-12-19

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 ExamDate 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 ExamDate DESC;

Beachten Sie, dass in T-SQL NULL s werden bei aufsteigender Sortierung zuerst und bei absteigender Sortierung zuletzt angezeigt. Auch die Zeilen mit demselben ExamDate werden in nicht deterministischer 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 . Der Monat wird namentlich angegeben, nicht nummeriert.

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 CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE);

Das Ergebnis sieht so aus (die Zeilen sind aufsteigend nach ExamYear sortiert). , ExamMonth und ExamDate ):

Betreff Prüfungsjahr PrüfungsMonat Prüfungstag
Kunst NULL NULL NULL
Gesundheit 2020 Januar 5
Wissenschaft 2020 Januar 5
Englisch 2020 Januar 8
Mathematik 2019 Dezember 19

Diskussion:

Um nach Datum zu gruppieren, erstellen Sie Datumswerte aus den Jahres-, Monats- und Tageswerten. Verwenden Sie dazu die Funktion CAST(). Wenn Sie ein Datum als Zeichenfolge in der Datei „YYYY-Month-DD gespeichert haben ' formatieren, können Sie es mit CAST(date_string AS date) in ein Datum umwandeln . Zuerst müssen Sie einen String erstellen, ebenfalls mit der Funktion CAST():

CAST(ExamYear AS VARCHAR(4))
+ '-'
+ ExamMonth
+ '-'
+ CAST(ExamDay AS VARCHAR(2))

Der Ausdruck CAST(ExamYear AS VARCHAR(4)) erzeugt einen String aus der in ExamYear gespeicherten Zahl . Der Ausdruck CAST(ExamDay AS VARCHAR(2)) erstellt einen String aus der in ExamDay gespeicherten Zahl . ExamMonth ist bereits ein String, also muss er nicht gecastet werden.

Dann müssen Sie diesen String mit CAST(date_string AS date) in ein Datum umwandeln Funktion:

CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE)

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 CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE) DESC;