Problem:
Du vil sortere rækkerne efter dato.
Eksempel 1:
exam
tabellen har to kolonner, subject
og exam_date
.
emne | eksamen_dato |
---|---|
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:
VÆLG *FRA eksamenORDER BY exam_date;
Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_date
):
Emne | Eksamensdato |
---|---|
Kunst | NULL |
Matematik | 2019-12-19 |
Videnskab | 2020-01-05 |
Sundhed | 2020-01-05 |
Engelsk | 2020-01-08 |
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.).
VÆLG *FRA eksamenORDER BY exam_date 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.
VÆLG *FRA eksamenORDER BY exam_date DESC;
Bemærk, at NULL
i SQLite 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 exam_date
vises i tilfældig 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ånederne er angivet i navne, ikke i tal.
emne | eksamen_år | eksamen_måned | eksamensdag |
---|---|---|---|
Matematik | 2019 | December | 19 |
Engelsk | 2020 | Januar | 8 |
Videnskab | 2020 | Januar | 5 |
Sundhed | 2020 | Januar | 5 |
Kunst | NULL | NULL | NULL |
Løsning:
VÆLG *FRA eksamenORDER BY exam_year, (CASE exam_month NÅR 'Januar' SÅ 1 NÅR 'FEBRUAR' SÅ 2 NÅR 'Marts' SÅ 3 NÅR 'April' SÅ 4 NÅR 'maj' SÅ 5. NÅR 'JUNI' SÅ 6. 'Juli' SÅ 7. NÅR 'August' SÅ 8. NÅR 'September'. SÅ 9. NÅRResultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter
exam_year
,exam_month
ogexam_day
):
emne | eksamen_år | eksamen_måned | eksamensdag |
---|---|---|---|
Kunst | NULL | NULL | NULL |
Matematik | 2019 | December | 19 |
Sundhed | 2020 | Januar | 5 |
Videnskab | 2020 | Januar | 5 |
Engelsk | 2020 | Januar | 8 |
Diskussion:
For at sortere rækkerne efter eksamensdato skal du først sortere efter år, derefter efter numerisk måned (ikke månedsnavn) og til sidst efter dag. Du kan konvertere månedsnavne til numeriske måneder med en CASE WHEN
klausul. Efter CASE
søgeord, skal du angive navnet på kolonnen. Derefter, efter hver HVORNÅR, angiv værdien i denne kolonne, brug THEN nøgleordet og angiv den nye værdi, du gerne vil tildele i stedet for den gamle. Her er kolonnen exam_month
, de aktuelle værdier i denne kolonne er 'January
', 'February
', …, 'December
', og de nye værdier er de numeriske måneder 1
, 2
, …, 12
. Når du er færdig med at konvertere alle værdierne, skal du huske at bruge END
nøgleord for at lukke CASE WHEN
klausul. Tag et kig:
CASE exam_month NÅR 'Januar' SÅ 1 NÅR 'Februar' SÅ 2 NÅR 'Marts' SÅ 3 NÅR 'April' SÅ 4 NÅR 'Maj' SÅ 5 NÅR 'Juni' SÅ 6 NÅR 'Juli' SÅ 7. ' SÅ 8. NÅR 'September' SÅ 9. NÅR 'Oktober' SÅ 10. NÅR 'November' SÅ 11. NÅR 'December' SÅ 12. END
Sådan konverterer du et månedsnavn til et månedsnummer. Du kan bruge det, når du sorterer rækkerne efter dato, dvs. efter år, numerisk måned og dag.
ORDER BY exam_year, (CASE exam_month NÅR "januar" SÅ 1 NÅR "Februar" SÅ 2 NÅR "Marts" SÅ 3 NÅR "April" SÅ 4 NÅR "maj" SÅ 5 NÅR "Juni" SÅ 6 NÅR "Juli" SÅ 7. NÅR 'August' SÅ 8. NÅR 'September' SÅ 9. NÅR 'Oktober'. SÅ 10. NÅRPå denne måde kan du sortere rækkerne i stigende rækkefølge efter dato.
NULL
s vil blive vist først. For at ændre rækkefølgen til faldende, brugDESC
søgeord efter hver kolonne iORDER BY
klausul. Sådan skal hele forespørgslen se ud:VÆLG *FRA eksamenORDER BY exam_year DESC, (CASE exam_month NÅR 'Januar' SÅ 1. NÅR 'Februar' SÅ 2. NÅR 'Marts' SÅ 3. NÅR 'April' SÅ 4. NÅR 'Maj' SÅ 5. NÅR 'Juni' SÅ NÅR 'JULI' SÅ 7. NÅR 'August' SÅ 8. NÅR 'September' SÅ 9. NÅR 'Oktober' SÅ 10. NÅR 'November' SÅ 11. NÅR 'December' SÅ SLUT 12. DESC, eksamen_dag DESC;Bemærk, at når du sorterer i faldende rækkefølge i SQLite,
NULL
s vises sidst.