問題:
月の名前を指定して、月番号で行を並べ替えます(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;