sql >> Database teknologi >  >> RDS >> Database

Sådan bestiller du efter dato i T-SQL

Problem:

Du vil sortere rækkerne efter dato.

Eksempel 1:

exam tabellen har to kolonner, subject og exam_date .

Emne Eksamensdato
Matematik 2019-12-19
Engelsk 2020-01-08
Videnskab 2020-01-05
Sundhed 2020-01-05
Kunst NULL

Du vil sortere rækkerne efter exam_date .

Løsning:

SELECT *
FROM Exam
ORDER BY ExamDate;

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter ExamDate ):

Emne Eksamensdato
Kunst NULL
Videnskab 2020-01-05
Sundhed 2020-01-05
Engelsk 2020-01-08
Matematik 2019-12-19

Diskussion:

Brug ORDER BY nøgleord og navnet på den kolonne, som du vil sortere efter. På denne måde vil du sortere dataene i stigende rækkefølge efter denne kolonne. Du kan også bruge ASC nøgleord for at gøre det klart, at rækkefølgen er stigende (den tidligste dato vises først, den seneste dato vises sidst osv.).

SELECT *
FROM Exam
ORDER BY ExamDate ASC;

Hvis du gerne vil se den seneste dato først og den tidligste dato sidst, skal du sortere i faldende rækkefølge. Brug DESC søgeord i dette tilfælde.

SELECT *
FROM Exam
ORDER BY ExamDate DESC;

Bemærk, at i T-SQL, NULL s vises først ved sortering i stigende rækkefølge og sidst ved sortering i faldende rækkefølge. Også rækkerne med den samme ExamDate vises i ikke-deterministisk rækkefølge (du kan muligvis se Science sekund og Health tredje eller Health sekund og Science tredje).

Eksempel 2:

exam tabellen har følgende kolonner:subject , exam_year , exam_month og exam_day . Måneden er angivet ved navn, ikke ved nummer.

Emne Eksamensår Eksamensmåned Eksamensdag
Matematik 2019 December 19
Engelsk 2020 Januar 8
Videnskab 2020 Januar 5
Sundhed 2020 Januar 5
Kunst NULL NULL NULL

Du vil sortere rækkerne efter eksamensdato.

Løsning:

SELECT *
FROM Exam
ORDER BY CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE);

Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter ExamYear , ExamMonth og ExamDate ):

Emne Eksamensår Eksamensmåned Eksamensdag
Kunst NULL NULL NULL
Sundhed 2020 Januar 5
Videnskab 2020 Januar 5
Engelsk 2020 Januar 8
Matematik 2019 December 19

Diskussion:

For at gruppere efter dato skal du oprette datoværdier fra år, måned og dagværdier. For at gøre dette skal du bruge CAST()-funktionen. Hvis du har en dato gemt som en streng i 'YYYY-Month-DD ' format, kan du caste det til en dato ved hjælp af CAST(date_string AS date) . Først skal du oprette en streng, også ved at bruge CAST()-funktionen:

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

Udtrykket CAST(ExamYear AS VARCHAR(4)) opretter en streng ud fra nummeret, der er gemt i ExamYear . Udtrykket CAST(ExamDay AS VARCHAR(2)) opretter en streng fra nummeret, der er gemt i ExamDay . ExamMonth er allerede en streng, så der er ingen grund til at kaste den.

Derefter skal du caste denne streng til en dato ved hjælp af CAST(date_string AS date) funktion:

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

Brug den med en ORDER BY klausul for at sortere rækkerne i stigende rækkefølge efter dato. Hvis du gerne vil se rækkerne i faldende rækkefølge, skal du blot tilføje en DESC søgeord som dette:

SELECT *
FROM Exam
ORDER BY CAST(
  CAST(ExamYear AS VARCHAR(4))
  + '-'
  + ExamMonth
  + '-'
  + CAST(ExamDay AS VARCHAR(2))
AS DATE) DESC;

  1. Postgresql Drop View

  2. Jeg forstår ikke Collation? (Mysql, RDBMS, tegnsæt)

  3. Julen kommer tidligt (Oracle 12.2)

  4. #1139 - Fik fejlen 'repetition-operator operand invalid' fra regexp