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