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;