sql >> Database >  >> RDS >> Mysql

Hoe te bestellen op maandnaam in MySQL

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

naam verjaardag_maand
Ronan Tisha NULL
December 2020
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 STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d');

Het resultaat ziet er als volgt uit:

naam verjaardag_maand
Donna Nell NULL
Purdie Casey Januari
Angie Julia April
Narelle Dillan April
Blaze Graeme Oktober
Ronan Tisha NULL
December Oktober

Discussie:

Om per maand te bestellen, maak je een datum aan met deze maand. Gebruik hiervoor de functie STR_TO_DATE(). Als u een datum hebt opgeslagen als een tekenreeks in de 'Year Month Day ' formaat, kunt u het naar een datum casten met STR_TO_DATE(date_string, '%Y %M %d') .

Eerst moet je een string maken met de functie CONCAT(). Het jaar kan elk jaar zijn dat u wilt (bijv. 0001 ) en de dag kan elke gewenste dag zijn (bijv. 01 ):

CONCAT('0001 ', birthday_month, ' 01')

De CONCAT() functie combineert alle argumenten in één string. De tekenreeks moet in de 'Year Month Day . staan ' formaat, dus het tweede argument moet birthday_month . zijn; het eerste en het derde argument moeten alleen in de juiste indeling zijn.

Vervolgens moet u deze tekenreeks converteren naar een datum met behulp van de STR_TO_DATE(date_string, '%Y %M %d') functie. Het tweede argument van deze functie is het formaat van de datum. %Y staat voor jaar, %M staat voor maand (de volledige naam, geen nummer), en %d staat voor dag.

STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d')

Gebruik het met een ORDER BY om de rijen in oplopende volgorde op datum te sorteren. Als u de rijen in aflopende volgorde wilt zien, voegt u gewoon een DESC . toe zoekwoord, zoals dit:

SELECT *
FROM birthday
ORDER BY STR_TO_DATE(CONCAT('0001 ', birthday_month, ' 01'), '%Y %M %d') DESC;

Merk op dat in MySQL, 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 derde en Narelle Dillan vierde, of Narelle Dillan derde en Angie Julia vierde).


  1. Android-fout:kan deze bewerking niet uitvoeren omdat de verbindingspool is gesloten

  2. Vereenvoudig gebruikersaccountbeheer met MariaDB MaxScale 2.2 en MariaDB Server 10.3

  3. Verschillende manieren om de gebruikers van MySQL te vullen

  4. PostgreSQL-waarde uit vorige rij gebruiken als deze ontbreekt