sql >> データベース >  >> RDS >> SQLite

SQLiteで日付順に並べ替える方法

    問題:

    行を日付で並べ替えたい。

    例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 テーブルには次の列があります:subjectexam_yearexam_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 '、および新しい値は数値の月12 、…、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は最後に表示されます。


    1. VisualStudio2017インストーラープロジェクトを使用したSQLServer名前付きインスタンス

    2. GI12.1.0.2とセグメンテーション違反をコンパイルできません

    3. SQL Server –sp_spaceusedの内部を分析します

    4. Windows用の良いpostgresqlクライアント?