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;