問題:
行を日付で並べ替えたい。
例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は最後に表示されます。