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:
SELECT * FROM exam ORDER BY exam_date;
Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_date
):
emne | eksamen_dato |
---|---|
Matematik | 2019-12-19 |
Videnskab | 2020-01-05 |
Sundhed | 2020-01-05 |
Engelsk | 2020-01-08 |
Kunst | NULL |
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 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.
SELECT * FROM exam ORDER BY exam_date DESC;
Bemærk, at NULL
i PostgreSQL og Oracle s vises sidst ved sortering i stigende rækkefølge og først 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 Sundhed andet 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 |
Du vil sortere rækkerne efter eksamensdatoen.
Løsning:
SELECT * FROM exam ORDER BY exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
Resultatet ser sådan ud (rækkerne er sorteret i stigende rækkefølge efter exam_year
, exam_month
og exam_date
):
emne | eksamen_år | eksamen_måned | eksamensdag |
---|---|---|---|
Matematik | 2019 | December | 19 |
Sundhed | 2020 | Januar | 5 |
Videnskab | 2020 | Januar | 5 |
Engelsk | 2020 | Januar | 8 |
Kunst | NULL | NULL | NULL |
Diskussion:
Du skal sortere rækkerne efter tre værdier:året, måneden og dagen, men for at have den korrekte rækkefølge skal du konvertere måneden til et tal ('January
' til 1
, 'February
' til 2
, etc.). Ellers vil du se 'December
' før 'January
'. Funktionen TO_DATE(eksamen_måned, 'Måned') konverterer det fulde månedsnavn til en dato i '0001-MM-01
' format. For eksempel får du '0001-12-01
' for december.
Du kan nu bruge EXTRACT(MONTH FROM date)-funktionen til at udtrække måneden fra denne datoværdi. Måneden returneres som et tal.
Ved at kombinere disse to funktioner kan du få måneden som et tal ved hjælp af følgende formel:
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
For at sortere rækkerne efter dato skal du sortere efter år, måned og dag (i denne rækkefølge). Hvis du gerne vil se den seneste eksamen først, skal du sortere i faldende rækkefølge. For at gøre dette skal du bruge en DESC
søgeord efter hver kolonne i ORDER BY
klausul.
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;