問題:
行を日付で並べ替えたい。
例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
の昇順で並べ替えられます ):
件名 | ExamDate |
---|---|
アート | NULL |
数学 | 2019-12-19 |
科学 | 2020-01-05 |
健康 | 2020-01-05 |
英語 | 2020-01-08 |
ディスカッション:
ORDER BY
を使用します キーワードと並べ替える列の名前。このようにして、この列でデータを昇順で並べ替えます。 ASC
を使用することもできます 順序が昇順であることを明確にするためのキーワード(最も早い日付が最初に表示され、最も遅い日付が最後に表示されるなど)。
SELECT * FROM exam ORDER BY exam_date ASC;
最も遅い日付を最初に表示し、最も早い日付を最後に表示する場合は、降順で並べ替える必要があります。 DESC
を使用する この場合のキーワード。
SELECT * FROM exam ORDER BY exam_date DESC;
SQLiteでは、NULL
sは、昇順で並べ替えるときに最初に表示され、降順で並べ替えるときに最後に表示されます。また、同じexam_date
の行 ランダムな順序で表示されます(Science
が表示される場合があります 2番目とHealth
3番目、またはHealth
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, (CASE exam_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), exam_day;
結果は次のようになります(行はexam_year
の昇順で並べ替えられます 、exam_month
、およびexam_day
):
subject | Exam_year | Exam_month | Exam_day |
---|---|---|---|
アート | NULL | NULL | NULL |
数学 | 2019 | 12月 | 19 |
健康 | 2020 | 1月 | 5 |
科学 | 2020 | 1月 | 5 |
英語 | 2020 | 1月 | 8 |
ディスカッション:
行を試験日で並べ替えるには、最初に年で並べ替え、次に数値の月(月の名前ではない)で並べ替え、最後に日で並べ替える必要があります。 CASE WHEN
を使用して、月の名前を数値の月に変換できます 句。 CASE
の後 キーワードで、列の名前を指定します。次に、各WHENの後に、この列に値を記述し、THENキーワードを使用して、古い値の代わりに割り当てる新しい値を指定します。ここでの列はexam_month
、この列の現在の値は'January
'、'February
'、…、'December
'、および新しい値は数値の月1
、2
、…、12
。すべての値の変換が完了したら、END
を使用することを忘れないでください CASE WHEN
を閉じるためのキーワード 句。ご覧ください:
CASE exam_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 exam_year, (CASE exam_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), exam_day
このようにして、行を日付の昇順で並べ替えることができます。 NULL
sが最初に表示されます。順序を降順に変更するには、DESC
を使用します ORDER BY
の各列の後のキーワード 句。クエリ全体は次のようになります。
SELECT * FROM exam ORDER BY exam_year DESC, (CASE exam_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, exam_day DESC;
SQLiteで降順で並べ替える場合は、NULL
sは最後に表示されます。