sql >> Database >  >> RDS >> Oracle

Hoe te bestellen op maandnaam in PostgreSQL of Oracle

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


  1. Oracle krijgt checksum-waarde voor een gegevensblok gedefinieerd door een select-clausule

  2. Hoe MySQL Query Cache in te schakelen

  3. Hoe de SPACE()-functie werkt in SQL Server (T-SQL)

  4. SQL Server - stop of verbreek de uitvoering van een SQL-script