問題:
行を日付で並べ替えたい。
例1:
exam
テーブルには2つの列、subject
があります およびexam_date
。
subject | Exam_date |
---|---|
数学 | 2019-12-19 |
英語 | 2020-01-08 |
科学 | 2020-01-05 |
健康 | 2020-01-05 |
アート | NULL |
exam_date
で行を並べ替えたい 。
解決策:
SELECT * FROM exam ORDER BY exam_date;
結果は次のようになります(行はexam_date
の昇順で並べ替えられます ):
subject | Exam_date |
---|---|
数学 | 2019-12-19 |
科学 | 2020-01-05 |
健康 | 2020-01-05 |
英語 | 2020-01-08 |
アート | NULL |
ディスカッション:
ORDER BY
を使用します キーワードと並べ替える列の名前。このようにして、この列でデータを昇順で並べ替えます。 ASC
を使用することもできます 順序が昇順であることを明確にするためのキーワード(最も早い日付が最初に表示され、最も遅い日付が最後に表示されるなど)。
SELECT * FROM exam ORDER BY exam_date ASC;
最も遅い日付を最初に表示し、最も早い日付を最後に表示する場合は、降順で並べ替える必要があります。 DESC
を使用する この場合のキーワード。
SELECT * FROM exam ORDER BY exam_date DESC;
PostgreSQLおよびOracleでは、NULL
sは、昇順で並べ替えるときに最後に表示され、降順で並べ替えるときに最初に表示されます。また、同じexam_date
の行 ランダムな順序で表示されます(Science
が表示される場合があります 2番目とHealth
3番目、または2番目の健康とScience
3番目)。
例2:
exam
テーブルには次の列があります:subject
、exam_year
、exam_month
、およびexam_day
。月は数字ではなく名前で示されます。
subject | Exam_year | Exam_month | Exam_day |
---|---|---|---|
数学 | 2019 | 12月 | 19 |
英語 | 2020 | 1月 | 8 |
科学 | 2020 | 1月 | 5 |
健康 | 2020 | 1月 | 5 |
アート | NULL | NULL | NULL |
試験日で行を並べ替えたい。
解決策:
SELECT * FROM exam ORDER BY exam_year, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')), exam_day;
結果は次のようになります(行はexam_year
の昇順で並べ替えられます 、exam_month
、およびexam_date
):
subject | Exam_year | Exam_month | Exam_day |
---|---|---|---|
数学 | 2019 | 12月 | 19 |
健康 | 2020 | 1月 | 5 |
科学 | 2020 | 1月 | 5 |
英語 | 2020 | 1月 | 8 |
アート | NULL | NULL | NULL |
ディスカッション:
行は、年、月、日の3つの値で並べ替える必要がありますが、正しい順序にするには、月を数値('January
)に変換する必要があります。 'から1
、'February
'から2
など)。それ以外の場合は、「December
」と表示されます。 '前'January
'。 TO_DATE(exam_month、'Month')関数は、完全な月の名前を'0001-MM-01
の日付に変換します ' フォーマット。たとえば、「0001-12-01
」を取得します。 '12月。
これで、EXTRACT(MONTH FROM date)関数を使用して、この日付値から月を抽出できます。月は数値として返されます。
これら2つの関数を組み合わせると、次の数式を使用して月を数値として取得できます。
EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month'))
行を日付で並べ替えるには、年、月、日で(この順序で)並べ替える必要があります。最新の試験を最初に見たい場合は、降順で並べ替える必要があります。これを行うには、DESC
を使用する必要があります ORDER BY
の各列の後のキーワード 条項。
SELECT * FROM exam ORDER BY exam_year DESC, EXTRACT(MONTH FROM TO_DATE(exam_month, 'Month')) DESC, exam_day DESC;