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

T-SQLで日付順に並べ替える方法

    問題:

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

    例1:

    exam テーブルには2つの列、subjectがあります およびexam_date

    件名 ExamDate
    数学 2019-12-19
    英語 2020-01-08
    科学 2020-01-05
    健康 2020-01-05
    アート NULL

    exam_dateで行を並べ替えたい 。

    解決策:

    SELECT *
    FROM Exam
    ORDER BY ExamDate;
    

    結果は次のようになります(行はExamDateの昇順で並べ替えられます ):

    件名 ExamDate
    アート NULL
    科学 2020-01-05
    健康 2020-01-05
    英語 2020-01-08
    数学 2019-12-19

    ディスカッション:

    ORDER BYを使用します キーワードと並べ替える列の名前。このようにして、この列でデータを昇順で並べ替えます。 ASCを使用することもできます 順序が昇順であることを明確にするためのキーワード(最も早い日付が最初に表示され、最も遅い日付が最後に表示されるなど)。

    SELECT *
    FROM Exam
    ORDER BY ExamDate ASC;
    

    最も遅い日付を最初に表示し、最も早い日付を最後に表示する場合は、降順で並べ替える必要があります。 DESCを使用する この場合のキーワード。

    SELECT *
    FROM Exam
    ORDER BY ExamDate DESC;
    

    T-SQLでは、NULL sは、昇順で並べ替えるときに最初に表示され、降順で並べ替えるときに最後に表示されます。また、同じExamDateの行 非決定論的な順序で表示されます(Scienceが表示される場合があります) 2番目とHealth 3番目、またはHealth 2番目とScience 3番目)。

    例2:

    exam テーブルには次の列があります:subjectexam_yearexam_month 、およびexam_day 。月は番号ではなく名前で指定されます。

    件名 ExamYear ExamMonth ExamDay
    数学 2019 12月 19
    英語 2020 1月 8
    科学 2020 1月 5
    健康 2020 1月 5
    アート NULL NULL NULL

    試験日で行を並べ替えたい。

    解決策:

    SELECT *
    FROM Exam
    ORDER BY CAST(
      CAST(ExamYear AS VARCHAR(4))
      + '-'
      + ExamMonth
      + '-'
      + CAST(ExamDay AS VARCHAR(2))
    AS DATE);
    

    結果は次のようになります(行はExamYearの昇順で並べ替えられます 、ExamMonth 、およびExamDate ):

    件名 ExamYear ExamMonth ExamDay
    アート NULL NULL NULL
    健康 2020 1月 5
    科学 2020 1月 5
    英語 2020 1月 8
    数学 2019 12月 19

    ディスカッション:

    日付でグループ化するには、年、月、および日の値から日付値を作成します。これを行うには、CAST()関数を使用します。 'YYYY-Month-DDに文字列として日付を保存している場合 '形式。CAST(date_string AS date)を使用して日付にキャストできます。 。まず、CAST()関数を使用して文字列を作成する必要があります:

    CAST(ExamYear AS VARCHAR(4))
    + '-'
    + ExamMonth
    + '-'
    + CAST(ExamDay AS VARCHAR(2))
    

    CAST(ExamYear AS VARCHAR(4)) ExamYearに保存されている番号から文字列を作成します 。式CAST(ExamDay AS VARCHAR(2)) ExamDayに保存されている番号から文字列を作成します 。 ExamMonth はすでに文字列であるため、キャストする必要はありません。

    次に、CAST(date_string AS date)を使用してこの文字列を日付にキャストする必要があります 機能:

    CAST(
      CAST(ExamYear AS VARCHAR(4))
      + '-'
      + ExamMonth
      + '-'
      + CAST(ExamDay AS VARCHAR(2))
    AS DATE)
    

    ORDER BYで使用します 行を日付の昇順で並べ替える句。行を降順で表示したい場合は、DESCを追加するだけです。 このようなキーワード:

    SELECT *
    FROM Exam
    ORDER BY CAST(
      CAST(ExamYear AS VARCHAR(4))
      + '-'
      + ExamMonth
      + '-'
      + CAST(ExamDay AS VARCHAR(2))
    AS DATE) DESC;
    

    1. 文字列の分割:T-SQLが少なくなりました

    2. インデックス作成ando:GINインデックス

    3. MySQLの頻度から十分位数を計算する

    4. SQLiteにデータを挿入するときに、NULL値を列のデフォルト値に変換する