Probleem:
U wilt de rijen op datum sorteren.
Voorbeeld 1:
Het exam
tabel heeft twee kolommen, subject
en exam_date
.
onderwerp | examendatum |
---|---|
Wiskunde | 2019-12-19 |
Engels | 2020-01-08 |
Wetenschap | 05-01-2020 |
Gezondheid | 05-01-2020 |
Kunst | NULL |
U wilt de rijen sorteren op exam_date
.
Oplossing:
SELECT * FROM exam ORDER BY exam_date;
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op exam_date
):
Onderwerp | ExamenDatum |
---|---|
Kunst | NULL |
Wiskunde | 2019-12-19 |
Wetenschap | 05-01-2020 |
Gezondheid | 05-01-2020 |
Engels | 2020-01-08 |
Discussie:
Gebruik de ORDER BY
trefwoord en de naam van de kolom waarop u wilt sorteren. Op deze manier sorteert u de gegevens in oplopende volgorde op deze kolom. U kunt ook de ASC
. gebruiken trefwoord om duidelijk te maken dat de volgorde oplopend is (de vroegste datum wordt eerst weergegeven, de laatste datum wordt als laatste weergegeven, enz.).
SELECT * FROM exam ORDER BY exam_date ASC;
Als u de laatste datum eerst en de vroegste datum als laatste wilt zien, moet u in aflopende volgorde sorteren. Gebruik de DESC
zoekwoord in dit geval.
SELECT * FROM exam ORDER BY exam_date DESC;
Merk op dat in SQLite, NULL
s worden als eerste weergegeven bij het sorteren in oplopende volgorde en als laatste bij het sorteren in aflopende volgorde. Ook de rijen met dezelfde exam_date
worden in willekeurige volgorde weergegeven (u ziet mogelijk Science
tweede en Health
derde, of Health
tweede en Science
derde).
Voorbeeld 2:
Het exam
tabel heeft de volgende kolommen:subject
, exam_year
, exam_month
, en exam_day
. De maanden worden gegeven in namen, niet in cijfers.
onderwerp | examenjaar | examen_maand | examendag |
---|---|---|---|
Wiskunde | 2019 | december | 19 |
Engels | 2020 | Januari | 8 |
Wetenschap | 2020 | Januari | 5 |
Gezondheid | 2020 | Januari | 5 |
Kunst | NULL | NULL | NULL |
Oplossing:
SELECT * FROM exam ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day;
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op exam_year
, exam_month
, en exam_day
):
onderwerp | examenjaar | examen_maand | examendag |
---|---|---|---|
Kunst | NULL | NULL | NULL |
Wiskunde | 2019 | december | 19 |
Gezondheid | 2020 | Januari | 5 |
Wetenschap | 2020 | Januari | 5 |
Engels | 2020 | Januari | 8 |
Discussie:
Om de rijen op onderzoeksdatum te sorteren, moet u eerst op jaar sorteren, dan op numerieke maand (geen maandnaam) en tenslotte op dag. U kunt maandnamen converteren naar numerieke maanden met een CASE WHEN
clausule. Na de CASE
trefwoord, geef de naam van de kolom op. Vermeld vervolgens na elke WHEN de waarde in deze kolom, gebruik het THEN-sleutelwoord en geef de nieuwe waarde op die u wilt toewijzen in plaats van de oude. Hier is de kolom exam_month
, de huidige waarden in deze kolom zijn 'January
', 'February
', ..., 'December
', en de nieuwe waarden zijn de numerieke maanden 1
, 2
, …, 12
. Vergeet niet om de END
. te gebruiken nadat u klaar bent met het converteren van alle waarden trefwoord om de CASE WHEN
. te sluiten clausule. Kijk eens:
CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END
Zo converteert u een maandnaam naar een maandnummer. U kunt het gebruiken bij het sorteren van de rijen op datum, dat wil zeggen op jaar, numerieke maand en dag.
ORDER BY exam_year, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END), exam_day
Op deze manier kunt u de rijen in oplopende volgorde op datum sorteren. De NULL
s wordt eerst weergegeven. Gebruik de DESC
. om de volgorde te wijzigen in aflopend trefwoord na elke kolom in de ORDER BY
clausule. Dit is hoe de hele zoekopdracht eruit zou moeten zien:
SELECT * FROM exam ORDER BY exam_year DESC, (CASE exam_month WHEN 'January' THEN 1 WHEN 'February' THEN 2 WHEN 'March' THEN 3 WHEN 'April' THEN 4 WHEN 'May' THEN 5 WHEN 'June' THEN 6 WHEN 'July' THEN 7 WHEN 'August' THEN 8 WHEN 'September' THEN 9 WHEN 'October' THEN 10 WHEN 'November' THEN 11 WHEN 'December' THEN 12 END) DESC, exam_day DESC;
Merk op dat bij het sorteren in aflopende volgorde in SQLite, NULL
s worden als laatste weergegeven.