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

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

    問題:

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

    例:

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

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

    行をbirthday_monthで並べ替えたい 。

    解決策:

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

    結果は次のようになります:

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

    ディスカッション:

    月単位で注文するには、今月の日付を作成します。これを行うには、STR_TO_DATE()関数を使用します。 'Year Month Dayに文字列として日付を保存している場合 '形式。STR_TO_DATE(date_string, '%Y %M %d')を使用して日付にキャストできます。 。

    まず、CONCAT()関数を使用して文字列を作成する必要があります。年は任意の年にすることができます(例:0001 )、その日は任意の日にすることができます(例:01 ):

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

    CONCAT() 関数は、すべての引数を1つの文字列に結合します。文字列は「Year Month Day」に含まれている必要があります '形式なので、2番目の引数はbirthday_monthである必要があります;最初と3番目の引数は正しい形式である必要があります。

    次に、STR_TO_DATE(date_string, '%Y %M %d')を使用してこの文字列を日付に変換する必要があります 働き。この関数の2番目の引数は、日付の形式です。 %Y 年を表し、%M 月(数字ではなくフルネーム)を表し、 %d 日を表します。

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

    ORDER BYで使用します 行を日付の昇順で並べ替える句。行を降順で表示したい場合は、DESCを追加するだけです。 このようなキーワード:

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

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


    1. OLAP接続の使用中にエラーが発生しました:MSOLAPプロバイダーがローカルマシンに登録されていません...

    2. SysBenchを使用してMySQLとMariaDBのパフォーマンスをベンチマークする方法

    3. PDO複数クエリ

    4. 複数のテーブルへの外部キー