sql >> データベース >  >> RDS >> SQLite

SQLiteで月の名前で注文する方法

    問題:

    月の名前を指定して、月番号で行を並べ替えます(1月を最初に表示し、12月を最後に表示します)。

    例:

    誕生日 テーブルには、nameと birthday_monthの2つの列が含まれています 。月は数字ではなく名前で示されます。

    name birthday_month
    Ronan Tisha 1月
    12月 4月
    アンジージュリア 4月
    Narelle Dillan 4月
    Purdie Casey 1月
    Donna Nell NULL
    Blaze Graeme 10月

    行をbirthday_monthで並べ替えたい 。

    解決策:

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

    結果は次のようになります(行は birthday_monthの昇順で並べ替えられます ):

    name birthday_month
    Purdie Casey 1月
    アンジージュリア 4月
    Narelle Dillan 4月
    Blaze Graeme 10月
    Ronan Tisha 1月
    12月 NULL
    Donna Nell NULL

    ディスカッション:

    行を月で並べ替えるには、月を(名前ではなく)数字で並べ替える必要があります。 CASE WHEN を使用して、月の名前を数値の月に変換できます 句。 CASEの後 キーワードで、列の名前を指定します。次に、各 WHENの後に 、この列に値を記載し、 THENを使用します キーワードをクリックし、古い値の代わりに割り当てる新しい値を指定します。ここでの列はbirthday_month 、この列の現在の値は' January '、'2月 '、…、'12月 '、および新しい値は数値の月 1 2、 …、 12 。すべての値の変換が完了したら、 ENDを使用することを忘れないでください CASE WHENを閉じるためのキーワード 句。ご覧ください:

    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
    

    これは、月の名前を月の番号に変換する方法です。これを使用して、月の昇順で行を並べ替えることができます。 ORDER BYで使用するだけです。 条項。

    SQLiteでは、 NULL sは、昇順で並べ替えるときに最初に表示され、降順で並べ替えるときに最後に表示されます。また、同じ birthday_monthの行 ランダムな順序で表示されます( Angie Juliaが表示される場合があります 2番目とNarelleDillan 3番目、または Narelle Dillan 2番目とAngieJulia 第3)。順序を降順に変更するには、 DESCを使用します ORDER BYの列の後のキーワード 句。クエリは次のようになります。

    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;
    

    1. Oracle INTERVAL DAYTOSECONDデータ型のNHibernateマッピング

    2. ContentDocumentをSalesforceカスタムオブジェクトに添付する

    3. Neo4j-Cypherを使用してインデックスを作成する

    4. SQLiteAssetHelper:書き込み用にデータベースを開くことができませんでした(読み取り専用を試みます)