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;