Probleem:
U wilt de rijen sorteren op maandnummer, gegeven maandnamen (u wilt dat januari eerst wordt weergegeven, december laatst).
Voorbeeld:
De birthday
tabel bevat twee kolommen:naam en birthday_month
. De maanden worden gegeven in namen, niet in cijfers.
naam | verjaardag_maand |
---|---|
Ronan Tisha | Januari |
December | April |
Angie Julia | April |
Narelle Dillan | April |
Purdie Casey | Januari |
Donna Nell | NULL |
Blaze Graeme | Oktober |
U wilt de rijen sorteren op birthday_month
.
Oplossing:
SELECT * FROM birthday ORDER BY (CASE birthday_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);
Het resultaat ziet er als volgt uit (de rijen zijn in oplopende volgorde gesorteerd op birthday_month
):
naam | verjaardag_maand |
---|---|
Purdie Casey | Januari |
Angie Julia | April |
Narelle Dillan | April |
Blaze Graeme | Oktober |
Ronan Tisha | Januari |
December | NULL |
Donna Nell | NULL |
Discussie:
Om de rijen op maand te sorteren, heb je de maanden nodig in cijfers (geen namen). U kunt maandnamen converteren naar numerieke maanden met behulp van de CASE WHEN
clausule. Na de CASE
trefwoord, geef de naam van de kolom op. Daarna, na elke WHEN
, vermeld de waarde in deze kolom, gebruik de THEN
zoekwoord en geef de nieuwe waarde op die u wilt toewijzen in plaats van de oude. Hier is de kolom birthday_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 birthday_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. Je kunt het gebruiken om de rijen in oplopende volgorde per maand te sorteren - gebruik het gewoon in de ORDER BY
clausule.
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 birthday_month
worden in willekeurige volgorde weergegeven (je ziet mogelijk Angie Julia
tweede en Narelle Dillan
derde, of Narelle Dillan
tweede en Angie Julia
derde). Gebruik de DESC
. om de volgorde te wijzigen in aflopend trefwoord na de kolom in de ORDER BY
clausule. Zo zou de zoekopdracht eruit moeten zien:
SELECT * FROM birthday ORDER BY (CASE birthday_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;