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