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