SQLite
 sql >> Datenbank >  >> RDS >> SQLite

So bestellen Sie nach Monatsnamen in SQLite

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.

name Geburtstagsmonat
Ronan Tisha Januar
Dezember April
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
 (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END);

Das Ergebnis sieht so aus (die Zeilen sind in aufsteigender Reihenfolge nach birthday_month sortiert ):

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

Diskussion:

Um die Zeilen nach Monat zu sortieren, benötigen Sie die Monate in Zahlen (nicht Namen). Mit dem CASE WHEN können Sie Monatsnamen in numerische Monate umwandeln Klausel. Nach dem CASE Schlüsselwort geben Sie den Namen der Spalte an. Dann nach jedem WHEN , geben Sie den Wert in dieser Spalte an, verwenden Sie den THEN Schlüsselwort und geben Sie den neuen Wert an, den Sie anstelle des alten zuweisen möchten. Hier ist die Spalte birthday_month , sind die aktuellen Werte in dieser Spalte 'January ', 'February ', …, 'December ', und die neuen Werte sind die numerischen Monate 1 , 2, …, 12 . Nachdem Sie alle Werte konvertiert haben, denken Sie daran, das END zu verwenden Schlüsselwort zum Schließen des CASE WHEN Klausel. Schau mal:

CASE birthday_month
  WHEN 'January' THEN 1
  WHEN 'February' THEN 2
  WHEN 'March' THEN 3
  WHEN 'April' THEN 4
  WHEN 'May' THEN 5
  WHEN 'June' THEN 6
  WHEN 'July' THEN 7
  WHEN 'August' THEN 8
  WHEN 'September' THEN 9
  WHEN 'October' THEN 10
  WHEN 'November' THEN 11
  WHEN 'December' THEN 12
END

So wandeln Sie einen Monatsnamen in eine Monatszahl um. Sie können es verwenden, um die Zeilen in aufsteigender Reihenfolge nach Monat zu sortieren – verwenden Sie es einfach im ORDER BY Klausel.

Beachten Sie, dass in SQLite 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 zweitens und Narelle Dillan drittens oder Narelle Dillan zweitens und Angie Julia Dritter). Um die Reihenfolge auf absteigend zu ändern, verwenden Sie DESC Stichwort nach der Spalte im ORDER BY Klausel. So sollte die Abfrage aussehen:

SELECT *
FROM birthday
ORDER BY
  (CASE birthday_month
    WHEN 'January' THEN 1
    WHEN 'February' THEN 2
    WHEN 'March' THEN 3
    WHEN 'April' THEN 4
    WHEN 'May' THEN 5
    WHEN 'June' THEN 6
    WHEN 'July' THEN 7
    WHEN 'August' THEN 8
    WHEN 'September' THEN 9
    WHEN 'October' THEN 10
    WHEN 'November' THEN 11
    WHEN 'December' THEN 12
  END) DESC;