Mysql
 sql >> Datenbank >  >> RDS >> Mysql

So bestellen Sie nach Monatsnamen in MySQL

Problem:

Sie möchten die Zeilen nach Monatsnummer und gegebenen Monatsnamen sortieren (Januar soll zuerst angezeigt werden, Dezember zuletzt).

Beispiel:

Der birthday Tabelle enthält zwei Spalten:name und birthday_month . Die Monate werden in Namen angegeben, nicht in Zahlen.p>

name Geburtstagsmonat
Ronan Tisha NULL
Dezember 2020
Angie Julia April
Narelle Dillan April
Purdie Casey Januar
Donna Nell NULL
Blaze Graeme Oktober

Sie möchten die Zeilen nach birthday_month sortieren .

Lösung:

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

Das Ergebnis sieht so aus:

name Geburtstagsmonat
Donna Nell NULL
Purdie Casey Januar
Angie Julia April
Narelle Dillan April
Blaze Graeme Oktober
Ronan Tisha NULL
Dezember Oktober

Diskussion:

Um nach Monat zu sortieren, erstellen Sie ein Datum mit diesem Monat. Verwenden Sie dazu die Funktion STR_TO_DATE(). Wenn Sie ein Datum als Zeichenfolge in „Year Month Day gespeichert haben ' formatieren, können Sie es mit STR_TO_DATE(date_string, '%Y %M %d') in ein Datum umwandeln .

Zuerst müssen Sie mit der Funktion CONCAT() einen String erstellen. Das Jahr kann ein beliebiges Jahr sein (z. B. 0001 ) und der Tag kann ein beliebiger Tag sein (z. B. 01 ):

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

Der CONCAT() Die Funktion kombiniert alle Argumente zu einem String. Die Zeichenfolge sollte im 'Year Month Day stehen ' Format, also sollte das zweite Argument birthday_month sein; das erste und das dritte Argument müssen nur im richtigen Format vorliegen.

Anschließend müssen Sie diese Zeichenfolge mithilfe von STR_TO_DATE(date_string, '%Y %M %d') in ein Datum umwandeln Funktion. Das zweite Argument dieser Funktion ist das Datumsformat. %Y steht für Jahr, %M steht für Monat (sein vollständiger Name, keine Zahl) und %d steht für Tag.

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

Verwenden Sie es mit einem ORDER BY -Klausel, um die Zeilen in aufsteigender Reihenfolge nach Datum zu sortieren. Wenn Sie die Zeilen in absteigender Reihenfolge sehen möchten, hängen Sie einfach ein DESC an Schlüsselwort, etwa so:

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

Beachten Sie, dass in MySQL NULL s werden bei aufsteigender Sortierung zuerst und bei absteigender Sortierung zuletzt angezeigt. Auch die Zeilen mit demselben birthday_month werden in zufälliger Reihenfolge angezeigt (möglicherweise sehen Sie Angie Julia dritte und Narelle Dillan viertens oder Narelle Dillan dritte und Angie Julia vierte).