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

PostgreSQLまたはOracleで月の名前で注文する方法

    問題:

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

    例:

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

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

    行をbirthday_monthで並べ替えたい 。

    解決策:

    SELECT *
    FROM birthday
    ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'));
    

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

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

    ディスカッション:

    1月から12月までの月で行を並べ替えるには、月を数値に変換する必要があります('January 'から1、'February 'から2 など)。それ以外の場合は、「December」と表示されます。 '前'January '。 TO_DATE(birthday_month、'Month')関数は、完全な月の名前を' 0001-MM-01の日付に変換します ' フォーマット。たとえば、「0001-12-01」を取得します。 '12月。

    これで、EXTRACT(MONTH FROM date)関数を使用して、この日付値から月を抽出できます。月は1の間の数字になります および12

    これら2つの関数を組み合わせると、次の数式を使用して月を数値として取得できます。

    EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month'))
    

    この式をORDER BYの後に置きます 月ごとに行を並べ替えます。最初に最新の月を表示する場合は、降順で並べ替える必要があります。これを行うには、DESCを使用する必要があります このようなキーワード:

    SELECT *
    FROM birthday
    ORDER BY EXTRACT(MONTH FROM TO_DATE(birthday_month, 'Month')) DESC;
    

    PostgreSQLとOracleでは、NULL sは、昇順で並べ替えるときに最後に表示され、降順で並べ替えるときに最初に表示されます。また、同じbirthday_monthの行 ランダムな順序で表示されます(Angie Juliaが表示される場合があります 2番目とNarelle Dillan 3番目、またはNarelle Dillan 2番目とAngie Julia 3番目)。


    1. ユーザー'DOMAIN\MACHINENAME$'のログインに失敗しました

    2. SQL Serverのスパース列:時間とスペースへの影響

    3. Prometheusを使用してPostgreSQLモニタリングをパーソナライズする新しい方法

    4. JDBCを使用してストアドプロシージャから*すべて*を取り戻す方法