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).