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 | NULL |
| December | Januari |
| 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 EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
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 vanaf januari tot en met december, moet u de maand omzetten in een getal ('January ' tot 1, 'February ' naar 2 , enzovoort.). Anders zou je 'December . zien ' voor 'January '. De TO_DATE(verjaardag_maand, 'Maand') functie converteert een volledige maandnaam naar een datum in de '0001-MM-01 ' formaat. U krijgt bijvoorbeeld '0001-12-01 ' voor december.
U kunt nu de functie EXTRACT(MAAND VANAF datum) gebruiken om de maand uit deze datumwaarde te extraheren. De maand is een getal tussen 1 en 12 .
Door deze twee functies te combineren, kunt u de maand als een getal krijgen met behulp van de volgende formule:
EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
Zet deze uitdrukking achter ORDER BY om de rijen op maand te sorteren. Als u eerst de laatste maand wilt zien, moet u in aflopende volgorde sorteren. Om dit te doen, moet je een DESC . gebruiken zoekwoord, zoals dit:
SELECT * FROM birthday ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
Merk op dat in PostgreSQL en Oracle, NULL s worden als laatste weergegeven bij het sorteren in oplopende volgorde en als eerste 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).